Newbie (but improving) - Passing a function name with parameters as aparameter
Terry Reedy
tjreedy at udel.edu
Thu May 10 13:33:20 EDT 2007
"mosscliffe" <mcl.office at googlemail.com> wrote in message
news:1178785638.736644.312970 at e51g2000hsg.googlegroups.com...
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
More information about the Python-list
mailing list