"mosscliffe" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]

Asun Friere pointed out the central flaw in your program.  Since passing 
functions as arguments is an important concept, here, for any newbies who 
did not understand, is a restatement of the problem and the fix.

| timeloop(lookup(myrecs,mypatts), 10)

This does not pass the lookup function to timeloop.  Rather it calls lookup 
and passes the boolean result.  The attempt to 'call' that boolean  gives

|I am trying to time a function's execution, but I get 'TypeError:
| 'bool' object is not callable' when I try to run it.

| I suspect it is my calling of 'timeloop' with the function name
| 'lookup' and its associated variables

Yes.  Make the following changes and all should be well.

| def timeloop(dofunction,iters=10):

def timeloop(func, args, iters=10)

|   import datetime
|   print "->-> Start of test", "LOOPS=", iters,
| datetime.datetime.now().ctime()
|   for x in xrange(iters):
|      print x
|      dofunction()

     func(*args)

|   print "<-<- End of test", "LOOPS=", iters,
| datetime.datetime.now().ctime()
|
| def lookup(recs,patterns):
|   matchcount = 0
|   pattcount = 0
|   for patt in patterns:
|      if matchcount < pattcount:
|         break
|      pattcount += 1
|      for rec in recs:
|         # print "PATT:", patt, " REC:", rec, " PATTCOUNT=", pattcount
|         if patt in rec:
|            matchcount +=1
|            break
|   # print"MATCHCOUNT=",matchcount, "PATTCOUNT=", pattcount
|   if matchcount == pattcount:
|      return True
|   else:
|      return False
|
|
|
| myrecs = ['This is a title for Brian', 'this is detail one for brian',
| 'this is detail two for brian', 'this is another detail one for
| brian']
|
| test1 = ['one', 'nomatch']
| test2 = ['one', 'two']
| test3 = ['title', 'two', 'nomatcheither']
|
| mypatts = test1
|
| timeloop(lookup(myrecs,mypatts), 10)

timeloop(lookup, (myrecs, mypaths), 10)

Terry Jan Reedy



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to