Случай, когда примечание []
полезно:
Если ваш объект является динамическим, и могут быть некоторые случайные значения в таких ключах, как number
и []
или любой другой специальный символ, например -
var a = { 1 : 3 };
Теперь, если вы попытаетесь получить доступ, как a.1
, он будет через ошибку, потому что он ожидает строку там.
Измените эту строку:
t = timeit.Timer("foo()")
К этому:
t = timeit.Timer("foo()", "from __main__ import foo")
Проверьте ссылку, которую вы указали в самом низу.
] Чтобы предоставить модулю timeit доступ к определенным вами функциям, вы можете передать параметр настройки, который содержит оператор импорта:
blockquote>Я только что протестировал его на своей машине и работал с изменениями.
добавьте в свою настройку «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 )
t = timeit.Timer("foo()", "from __main__ import foo")
Поскольку timeit не имеет ваших данных в области видимости.
Вы можете попробовать этот взлом:
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")
). Специально, если вы хотите протестировать несколько разных функций, это сэкономит много информации!
– A.Sommerh
28 July 2014 в 08:30
import builtins
и 'builtins .__ dict __. Update (locals ())'
– greole
24 February 2016 в 08:46
Вы можете использовать globals=globals()
t = timeit.Timer("foo()", globals=globals())
Другой вариант - передать
blockquote>globals()
наglobals
, что приведет к выполнению кода в текущем глобальном пространстве имен. Это может быть более удобным, чем индивидуальное определение импорта
globals
не параметр для Python 2's timeit
– tony_tiger
30 October 2017 в 07:25