Dumme Frage zu timeit (Übergabe von Referenzen)
Verfasst: Freitag 11. April 2008, 14:15
Schönen Freitag!
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:
Wenn ich ausgehend davon aber die Zeitmessung in einer Funktion kapsle, ist die Referenz nicht mehr in __main__, sondern im lokalen Namensraum der Funktion (oder?):
Also meine banale Frage: wie bekomme ich ref in den Namensraum des timeit-Codes, respektive wie heißt der lokale Namensraum einer Funktion? (wenn ich wüsste, wie der heißt, könnte ich from dort importieren).
Oder bin ich auf dem Holzweg, und das geht alles ganz einfach?
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?