Ich bin in ein Chaos mit den Namespaces gestrudelt: Nämlich möchte ich mit dem timeit-Modul einige Messungen machen. Für die Messung brauche ich aber eine Referenz auf ein vorher erzeugtes Objekt. Und es gelingt mir nicht, die Referenz bis in den Code-String für timeit.Timer zu übergeben.
In der Dokumentation steht nur als Beispiel, daß man Namen aus __main__ importieren kann:
Code: Alles auswählen
>>> from timeit import Timer
>>> a = 2.0**.5 # irgendeine Referenz für die Zeitmessung
>>> t = Timer('1.0/a', 'from __main__ import a') # irgendeine Aktion zum Messen
>>> t.timeit(1)
1.0967254638671875e-05 # funktioniert, wie erwartet
Code: Alles auswählen
>>> def timeit_wrapper(ref):
... print dir() # um zu sehen, welche Namen hier sind
... t2 = Timer('1.0/ref', 'from __main__ import ref')
... return t2.timeit(1)
... # das ist natürlich Blödsinn, weil's in __main__ keinen Namen "ref" gibt
...
>>> timeit_wrapper(3.14)
['ref']
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 4, in timeit_wrapper
File "/usr/lib/python2.4/timeit.py", line 161, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 3, in inner
ImportError: cannot import name ref
Oder bin ich auf dem Holzweg, und das geht alles ganz einfach?