Ist @measured ein Standard-Dekorateur? Welche Bibliothek ist es?
Frage
dieser Blog-Artikel sie verwenden das Konstrukt:
@measured
def some_func():
#...
# Presumably outputs something like "some_func() is finished in 121.333 s" somewhere
Diese @measured
Richtlinie scheint nicht mit rohem Python zu arbeiten. Was ist das?
UPDATE:? Ich von Triptych, dass @something
gültig ist, aber wo kann ich @measured
finde, ist es in einer Bibliothek ist irgendwo, oder ist der Autor dieses Blogs etwas von seiner eigenen Code-Basis mit
Lösung
@measured
ziert die some_func () Funktion, eine Funktion oder eine Klasse mit dem Namen measured
verwenden. Die @
ist die Dekorateur Syntax, measured
sind die Dekorateur Funktionsnamen.
Dekorateure kann ein bisschen schwer zu verstehen sein, aber sie sind entweder Wrap-Code um eine Funktion im Grunde verwendet, oder Code in eine injizieren.
Zum Beispiel der gemessene Funktion (als Dekorateur verwendet) wahrscheinlich wie dies umgesetzt wird ...
import time
def measured(orig_function):
# When you decorate a function, the decorator func is called
# with the original function as the first argument.
# You return a new, modified function. This returned function
# is what the to-be-decorated function becomes.
print "INFO: This from the decorator function"
print "INFO: I am about to decorate %s" % (orig_function)
# This is what some_func will become:
def newfunc(*args, **kwargs):
print "INFO: This is the decorated function being called"
start = time.time()
# Execute the old function, passing arguments
orig_func_return = orig_function(*args, **kwargs)
end = time.time()
print "Function took %s seconds to execute" % (end - start)
return orig_func_return # return the output of the original function
# Return the modified function, which..
return newfunc
@measured
def some_func(arg1):
print "This is my original function! Argument was %s" % arg1
# We call the now decorated function..
some_func(123)
#.. and we should get (minus the INFO messages):
This is my original function! Argument was 123
# Function took 7.86781311035e-06 to execute
Die Dekorateur Syntax ist nur ein kürzerer und sauberere Weg, um den folgenden zu tun:
def some_func():
print "This is my original function!"
some_func = measured(some_func)
Es gibt einige Dekorateure mit Python enthalten, zum Beispiel staticmethod
- aber measured
ist nicht einer von ihnen:
>>> type(measured)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'measured' is not defined
Überprüfen Sie die Projekte import
Anweisungen, um zu sehen, wo die Funktion oder Klasse herkommt. Wenn es verwendet from blah import *
Sie alle diese Dateien überprüfen müssen (weshalb import *
abgeraten), oder Sie könnten nur so etwas wie grep -R def measured *
tun
Andere Tipps
Ja, es ist echt. Es ist eine Funktion Dekorateur.
Funktion Dekorateure in Python sind Funktionen, die eine Funktion übernehmen, wie es einziges Argument ist, und eine neue Funktion in seinem Platz zurück.
@classmethod
und @staticmethod
zwei in Funktion Dekorateure gebaut werden.
gemessen ist der Name einer Funktion, die definiert werden müssen, bevor der Code funktioniert.
In der Regel jede Funktion als Dekorateur verwendet wird, muss eine Funktion übernehmen und eine Funktion zurück. Die Funktion wird mit dem Ergebnis, ersetzt werden, um es den Dekorateur zugeben -. Gemessen () in diesem Fall