"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