On Sunday 7 Jun 2015 11:51 CEST, Steven D'Aprano wrote: > On Sun, 7 Jun 2015 04:39 pm, Cecil Westerhof wrote: > >> Sometimes I just want to know how much time a function takes, but >> at the same time I also want the result of the function. For this I >> wrote the following function: def time_test(function, *args): >> startTime = time.time() results = function(*args) endTime = >> time.time() print('It took {0} seconds'.format(endTime - >> startTime)) return results > > Oh, I forgot to mention... > > This has the disadvantage that it only prints the time, you cannot > collect it for further processing. (Well, not easily -- you could > always shadow the print built-in, then parse the string... ugggh, > that's horrible.)
I already found this an omission and posted a better version. > Using the Timer with statement I linked to earlier, you can easily > collect both the time and the calculated result: > > with Timer(verbose=False) as t: > do_this() > do_that() > result = something_else() > > time_taken = t.interval > print(result, "took", time_taken) Personally I find: time_test(test_random, (100, 10 ** 5)) better as: with Timer() as t: test_random(100, 10 ** 5) also because I will do it in a loop with different values for the second (and maybe the first) parameter. But that is probably personal preference. > If you are interested, I have a more advanced version of that Timer > which I use almost every day. It works in Python 2.4 through 3.3, I > expect it to work in 3.4 and 3.5 as well, and is extensively tested > in CPython and seems to work in Jython and IronPython as well. I would certainly be interested. I work with 3.4, so I could test it for you. And maybe even build a 3.5 version and test it there also. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof -- https://mail.python.org/mailman/listinfo/python-list