2016-03-31 16 views
1

Das ist, was ich tue:Wie man Code innerhalb des timeit Bereichs erneuert?

In [9]: setup = ''' 
import my_module    
generator = my_module.any_func(1, 'two') 
''' 

In [10]: timeit.timeit('list(generator)', setup=setup, number=1000) 
Out[10]: 4.6911962032318115 

Wenn ich my_module ändern und

In [11]: timeit.timeit('list(generator)', setup=setup, number=1000) 

erneut ausführen, timeit Sie diese Änderungen nicht erkennen. Zur Zeit schließe ich IPython und mache das ganze Zeug wieder.

Gibt es eine Möglichkeit zu erneuern timeit 's Umfang? Etwas wie reload?

Antwort

1

In der Zwischenzeit vermeide ich einen kontinuierlichen Neustart eines Python-Shell mit dieser „Abhilfe“:

>>> import my_module 
>>> setup = ''' 
>>> from __main__ import my_module 
>>> generator = my_module.any_func 
>>> ''' 

von my_module im __main__ Umfang des Python-Shell importieren und zurück, um es im timeit Umfang beziehen ist möglich changings im __main__ Umfang über

>>> reload(my_module) 

Dabei werden verwenden timeit das neu geladen Modul neu zu laden.

Ich habe versucht, die reload(my_module) innerhalb timeit Setup zu tun, aber dies wird eine NameError erhöhen. Auf der einen Seite scheint es, dass der Anwendungsbereich timeit permanent ist, andererseits ist der Zugriff innerhalb dieses Bereichs über reload nicht möglich. Es ist eine Art schwarze Magie ...