Saya mencoba mencari tahu berapa banyak waktu yang diperlukan untuk mengeksekusi pernyataan Python, jadi saya mencari online dan menemukan bahwa perpustakaan standar menyediakan modul yang disebut waktu yang dimaksudkan untuk melakukan hal itu:
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()
Namun, ini menghasilkan kesalahan:
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
Saya masih baru mengenal Python dan saya tidak sepenuhnya memahami semua masalah cakupan yang dimilikinya, tetapi saya tidak tahu mengapa cuplikan ini tidak berfungsi. Ada pemikiran?
Dengan Python 3, Anda dapat menggunakan
globals=globals()
t = timeit.Timer("foo()", globals=globals())
Dari dokumentasi :
sumber
globals
bukan parameter untuk Python 2timeit
Anda dapat mencoba retasan ini:
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()
sumber
t = timeit.Timer("foo()", "from __main__ import foo")
). Khususnya jika Anda ingin menguji beberapa fungsi berbeda, ini akan menghemat banyak pengetikan!import builtins
dan 'builtins .__ dict __. Update (lokal ())'t = timeit.Timer("foo()", "from __main__ import foo")
Sejak waktu itu tidak memiliki barang-barang Anda dalam ruang lingkup.
sumber
tambahkan ke dalam pengaturan Anda "import thisfile;"
lalu ketika Anda memanggil fungsi setup myfunc () gunakan "thisfile.myfunc ()"
misalnya "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 )
sumber