6 Stimmen

Python timeit Problem

Ich versuche, das timeit-Modul zu verwenden, aber ich weiß nicht, wie. Ich habe eine main:

from Foo import Foo
if __name__ == '__main__':
...
   foo = Foo(arg1, arg2) 
   t = Timer("foo.runAlgorithm()")
   print t.timeit(2)

und meine Klasse Foo hat eine Methode mit dem Namen runAlgorithm()

Der Fehler ist dieser:

NameError: globaler Name 'foo' ist nicht definiert

Was mache ich falsch? Kann ich die Zeit aus einer Klassenmethode übernehmen?

16voto

AndiDog Punkte 65445

Anstatt die notwendigen setup Parameter zum Einrichten der timeit-Umgebung können Sie einfach die Methode (oder irgendetwas, das aufrufbar ist) übergeben:

t = Timer(foo.runAlgorithm)

Aus der Dokumentation:

Geändert in Version 2.6: Die Parameter stmt und setup können jetzt auch Objekte annehmen, die ohne Argumente aufrufbar sind.

Wenn Sie einige Argumente übergeben müssen, können Sie die Funktion currying mit functools.partial zum Beispiel:

class C:
    def printargs(self, a, b):
        print a, b

from functools import partial
foo = C()
t = Timer(partial(foo.printargs, 1, 2))

2voto

SilentGhost Punkte 285785

と言って docs Beispiel zeigen, die Sie bestehen müssen setup Erklärungen:

t = Timer("foo.runAlgorithm()", 'from __main__ import foo')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X