Seite 1 von 1
Was bedeutet das @ vor Funktionen
Verfasst: Montag 18. Mai 2015, 16:39
von chevallier
Hallo,
öfters mal sehe ich ein @-Zeichen bevor eine Funktion mit def deklariert wird.
Kann mit bitte jemand ein Stichwort geben, bzw. sagen wo man das nachlesen kann?
Danke und viele Grüße.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Montag 18. Mai 2015, 17:12
von Sirius3
@chevallier: Das Stichwort ist "decorator"
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 08:38
von chevallier
Hallo,
kann mir bitte jemand einige sinnvolle Beispiele nennen wofür man dieses wunderbare Konstrukt nun benutzt?
Vielen Dank.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 09:13
von /me
chevallier hat geschrieben:kann mir bitte jemand einige sinnvolle Beispiele nennen wofür man dieses wunderbare Konstrukt nun benutzt?
Schau dir mal in der Dokumentation
functools.lru_cache an. Das sollte dir eine erste Idee geben, was mit einem Decorator möglich ist.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 09:18
von jerch
@chevallier:
Dekoratoren sind in Python sehr mächtig. Von einfachen makroähnlichen Ersetzungen über Ereignis-/Callbackregistrierung bis zum Verketten/Einbetten von Funktionalität ist vieles denkbar. Wenn Du aus der Beschreibung der Dekoratoren nicht siehst, wofür Du diese brauchen kannst, brauchst Du wahrscheinlich keine. Am Ende sind Dekoratoren nur eine andere syntaktische Form, d.h. Du kommst für Deine Probleme auch immer ohne aus.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 09:23
von Hyperion
chevallier hat geschrieben:
kann mir bitte jemand einige sinnvolle Beispiele nennen wofür man dieses wunderbare Konstrukt nun benutzt?
Immer dann, wenn man Verhalten zur Laufzeit modifizieren will, ohne dass der Aufrufer etwas ändern müsste
Das läuft auf den
Decorator-Pattern hinaus (was die Motivation angeht!) - das ist sicherlich etwas fortgeschritteneres, was Du vermutlich noch nicht im vollen Umfang verstehen wirst oder auch benötigst.
Gut Beispiele sind Handler-Funktionen bei Webframeworks, wie z.B.
Flask oder
Bottle. Dort werden Decoratoren für das Routing benutzt. Oder noch banaler der
``@property``-Dekorator aus der Standardlib.
Um das alles zu Verstehen solltest Du mal googlen - das wäre übrigens eigentlich der erste Schritt, anstatt hier etwas allgemeines nachzufragen

Denn Anwendungsbeispiele werden eigentlich immer in Tutorials genannt und umrissen, die Dekoratoren in Python erklären...
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 10:15
von chevallier
jerch hat geschrieben:Wenn Du aus der Beschreibung der Dekoratoren nicht siehst, wofür Du diese brauchen kannst, brauchst Du wahrscheinlich keine.
Nein, ich brauche keine, von mir aus kann man sie abschaffen, aber man trifft oft auf sie wenn man Code lesen möchte, den man verstehen will.
Hyperion hat geschrieben:Um das alles zu Verstehen solltest Du mal googlen - das wäre übrigens eigentlich der erste Schritt, anstatt hier etwas allgemeines nachzufragen

Denn Anwendungsbeispiele werden eigentlich immer in Tutorials genannt und umrissen, die Dekoratoren in Python erklären...
Google? Was ist das?
Ich habe schon verstanden, dass, wenn ich ein Problem habe, ich nur im Notfall hier im Forum fragen darf aber stell dir vor ich treffe nur auf Beispiele a la:
Code: Alles auswählen
def wrapfunc(func):
def innerfunc():
return func() + 1
return innerfunc
@wrapfunc
def funcy():
return 3
print(funcy())
Dann denke ich mir, wozu das ganze?
Und bezüglich des Handbuches: Ganz ehrlich, meine Englischkenntnisse sind gut bis sehr gut, trotzdem verstehe ich kaum etwas, weil es zu technisch ist, zB.:
@staticmethod taucht oft auf.
Ich versuche schon einige Zeit herauszufinden wozu man das Ding gebraucht, laut Handbuch:
"Return a static method for function." - Toll.
Python ist nicht schwer, nur schlecht dokumentiert. Z.B. ist die Syntax von PHP viel unübersichtlicher, man lernt es trotzdem leichter, weil das Manual viel besser aufgebaut und verständlicher ist.
Wenn ich was suche, dann meide ich das Handbuch, es kann ruhig auf englisch sein, aber nur nicht das Handbuch, am besten irgend ein Geek-Blog, etc.
Ich danke Euch für Eure Mühen.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 11:00
von bwbg
Dekoratoren sind, wie oben bereits genannt lediglich syntaktischer Zucker für Funktionen höherer Ordnung (higher-order functions). In Kürze: Funktionen höherer Ordnung sind Funktionen welche Funktionen als Parameter entgegen nehmen und/oder eine Funktion als Rückgabewert haben.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 11:05
von Hyperion
chevallier hat geschrieben:
Ich habe schon verstanden, dass, wenn ich ein Problem habe, ich nur im Notfall hier im Forum fragen darf ...
Unsinn! Das hat nichts mit "Notfall" oder "bitte nur selten fragen" zu tun, sondern mit der *Methodik*! Du stellst die Frage "was bedeutet das @..." So etwas könnte man imho auch selber *schneller* herausfinden, indem man googelt. Ok sei's drum. Dann bekommst Du als Antwort das Stichwort "Dekorator" und postest dann eine ziemlich "genervt" wirkende Bitte um Beispiele, ohne wenigstens kurz zu benennen, *was* Du Dir jetzt angeguckt hast oder welches Tutorial dazu Dir keine sinnvollen Beispiele genannt hat. Das würde ich schon erwarten...
chevallier hat geschrieben:
Und bezüglich des Handbuches: Ganz ehrlich, meine Englischkenntnisse sind gut bis sehr gut, trotzdem verstehe ich kaum etwas, weil es zu technisch ist, zB.:
@staticmethod taucht oft auf.
Ich versuche schon einige Zeit herauszufinden wozu man das Ding gebraucht, laut Handbuch:
"Return a static method for function." - Toll.
Python ist nicht schwer, nur schlecht dokumentiert. Z.B. ist die Syntax von PHP viel unübersichtlicher, man lernt es trotzdem leichter, weil das Manual viel besser aufgebaut und verständlicher ist.
Wenn ich was suche, dann meide ich das Handbuch, es kann ruhig auf englisch sein, aber nur nicht das Handbuch, am besten irgend ein Geek-Blog, etc.
Also Du könntest bei so etwas immer googeln, da wird man bei "sense of staticmethod in python" fündig! Zudem kannst und solltest Du auch die Suchfunktion dieses Forums nutzen. Da findet man zur Suche "
staticmethod sinn" das folgende Thema:
http://www.python-forum.de/viewtopic.ph ... ethod+sinn
Und das kann man auch ohne Englischkenntnisse verstehen.
Grundsätzlich scheint Dein Verständnisproblem *inhaltlicher* Natur zu sein! Wäre das alles auf deutsch, würdest Du die Doku offenbar auch nicht kapieren, weil Dir vermutlich noch das Verständnis von vielen Basis-Konzepten fehlt. Solche werden in der Doku natürlich nicht an jeder Stelle bis ins kleinste erklärt, sondern *vorausgesetzt*. (Im Tutorial natürlich schon - ich beziehe mich auf die Library- und Language-Sektionen) Solche Dinge muss man eben durch Tutorials lernen und teilweise auch über die Grenzen *eines* Buches hinaus Querrecherche betreiben.
Übrigens eigent man sich so etwas auch nicht alles über Nach an! Man muss da auch ein wenig Geduld haben. Zudem wird das Verständnis für manche Themen auch erst geweckt bzw. *nachhaltig* im Kopf hinterlegt, wenn man darüber in seinem eigenen Code stolpert (Stichworte Zeitkomplexität, Unit Testing, Lose Kopplung, uvm).
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 12:26
von chevallier
Hast schon Recht Hyperion, war ein wenig genervt vom ganzen Kram - ich weiß du nimmst es nicht persönlich.
Re: Was bedeutet das @ vor Funktionen
Verfasst: Freitag 22. Mai 2015, 12:56
von Hyperion
chevallier hat geschrieben:ich weiß du nimmst es nicht persönlich.
Richtig
