2017-01-11 7 views
0

Ich versuche, die Bedeutung des Dekorateur in Python, um herauszufinden, und einen Ausschnitt, wie unten auf Python Konsole üben:Warum funktioniert Dekorateur so?

def print_my_name(name): 
    print "I am %s" %(name()) 

@print_my_name 
def my_name(): 
    return "Hans" 

Und es wird mit kommen,

Ich bin Hans

Es passiert nie bei normalen Funktionen. Kann mir jemand sagen, wie es funktioniert?

Danke

+0

Was möchten Sie wissen? –

+0

@Shivkumar Kondi eigentlich habe ich nicht my_name() aufgerufen, aber es funktioniert immer noch automatisch. Woher? – codexplorer

+0

Ich habe meine Antwort aktualisiert. Wenn möglich, können Sie es hier in Kürze lesen .. http://www.programiz.com/python-programming/decorator –

Antwort

1

Dekorateur die Funktionsdefinition nimmt und erstellt eine neue Funktion, die diese Funktion ausführt, und wandelt das Ergebnis.

Die kürzeste Erklärung, die ich geben kann, ist, dass Dekoratoren wrap Ihre Funktion in einer anderen Funktion, die eine Funktion zurückgibt.

Dieser Code, zum Beispiel:

@decorate 
def foo(a): 
    print a 

würde diesen Code äquivalent sein, wenn Sie die Dekorateur Syntax entfernen:

def bar(a): 
    print a 

foo = decorate(bar) 

Zierer manchmal Parameter übernehmen, die die dynamisch generierten Funktionen übergeben werden um ihre Ausgabe zu ändern.

Ein weiterer Begriff, den Sie lesen sollten, ist Schließung, wie das ist das Konzept, das Dekoratoren zu arbeiten ermöglicht.

+0

Vielen Dank für Ihre schnelle Antwort. Ich weiß was Dekorateur ist. Aber ich frage mich, warum es eine Ausgabe direkt ohne Aufruf gibt, nachdem ich mit der Eingabe fertig bin und "Enter" drücke. – codexplorer

+1

@ user3893952 Verstehen, dass Aufrufmechanismus dekoriert. Deshalb habe ich einen Link oben im Kommentar erwähnt –

+0

OK, ich habe Ihren Standpunkt. Eigentlich macht foo = decorate (bar) den Trick hinter der Szene. Danke, – codexplorer