Estoy tratando de averiguar cuánto tiempo lleva ejecutar una instrucción Python, así que busqué en línea y encontré que la biblioteca estándar proporciona un módulo llamado timeit que pretende hacer exactamente eso:Obtener "nombre global 'foo' no está definido" con timeit de Python
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()
sin embargo, esto produce un error:
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
todavía soy nuevo en Python y no entiendo plenamente todas las cuestiones de alcance que tiene, pero No sé por qué este fragmento no funciona. ¿Alguna idea?
Funciona! Sin embargo, este es un diseño de interfaz bastante estúpido si tengo que proporcionar el comando Deseo cronometrar como una cadena e importar el módulo __main__ para que funcione. –
El espacio de nombres de Python es una absoluta locura para mí. Supongo que tiene sentido para cierto tipo de mente, pero esa clase de mente no es una de las que poseo. Gracias $ DEITY por Ruby, en mi caso. – womble
womble, esto es una verruga, no es un problema general de espacio de nombres python. Tema principal: http://writeonly.wordpress.com/2008/09/12/using-python-timeit-to-time-functions/ tiene enlaces a otras discusiones sobre esto. –