Я пытаюсь узнать, сколько времени требуется для выполнения оператора Python, поэтому я поискал в Интернете и обнаружил, что стандартная библиотека предоставляет модуль с именем timeit, который призван делать именно это:
import timeit
def foo():
# ... contains code I want to time ...
def dotime():
t = timeit.Timer("foo()")
time = t.timeit(1)
print "took %fs\n" % (time,)
dotime()
Однако это вызывает ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in dotime
File "/usr/local/lib/python2.6/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
NameError: global name 'foo' is not defined
Я все еще новичок в Python, и я не совсем понимаю все проблемы с областью видимости, которые у него есть, но я не знаю, почему этот фрагмент не работает. есть идеи?
С Python 3 вы можете использовать
globals=globals()
t = timeit.Timer("foo()", globals=globals())
Из документации :
источник
globals
не параметр для Python 2timeit
Вы можете попробовать этот хак:
import timeit def foo(): print 'bar' def dotime(): t = timeit.Timer("foo()") time = t.timeit(1) print "took %fs\n" % (time,) import __builtin__ __builtin__.__dict__.update(locals()) dotime()
источник
t = timeit.Timer("foo()", "from __main__ import foo")
). Особенно если вы хотите протестировать несколько различных функций, это сэкономит вам много времени на набор текста!import builtins
и 'builtins .__ dict __. Update (locals ())'t = timeit.Timer("foo()", "from __main__ import foo")
Поскольку timeit не имеет ваших вещей в поле зрения.
источник
добавьте в свою настройку "import thisfile;"
затем при вызове функции настройки myfunc () используйте thisfile.myfunc ()
например, "thisfile.py"
def myfunc(): return 5 def testable(par): pass t=timeit.timeit(stmt="testable(v)",setup="import thisfile; v=thisfile.myfunc();").repeat(10) print( t )
источник