Während dieser article kürzlich auf Python-Dekoratoren zu lesen, gab es als Beispiel die Technik memoization als eine Anwendung von Python Dekoratoren. Während ich ein funktionierendes Verständnis von Python-Dekoratoren habe, möchte ich von mehr solchen effektiven Anwendungsfällen für Dekorateure wissen, und wie Sie sie normalerweise in Ihrem alltäglichen Code verwenden.Typische Anwendungs- und Anwendungsfälle für Python-Dekorierer
Antwort
Sie können effektive Anwendungsfälle für Python-Dekoratoren im Django-Webframework auth
docs betrachten. Klare Beispiele (die ich persönlich jeden Tag benutze) beinhalten die Verwendung von Dekorierern für restricting views to authenticated users, restricting access depending on specific user permissions, usw.
Zur Erleichterung der anderen @ Josvic Antwort möglicherweise beziehen sich auf [diese] (https://docs.djangoproject.com/en/dev/topics/http/decorators/) unter anderem. – subiet
@subset Genau. Ich habe mich gerade auf spezifische bezogen, die ich wirklich nützlich finde :) –
Danke für die Bearbeitung der Antwort :) – subiet
Dies ist ein praktisches Beispiel. Sieh dir Fibonaccis Seriensumme mit und ohne Memo an.
from functools import wraps
def memo(func):
cache = {}
@wraps(func)
def wrap(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrap
def fib(i):
if i < 2: return 1
return fib(i-1) + fib(i-2)
@memo
def fib_memo(i):
if i < 2: return 1
return fib_memo(i-1) + fib_memo(i-2)
Und jetzt testen Sie die Geschwindigkeitsdifferenz!
>>> print fib(200)
...
>>> print fib_memo(200)
...
Dies ist das genaue Beispiel, das ich in dem Link in der Frage erwähne. Die Nützlichkeit der Dekorateure in diesem Szenario veranlasste mich, weitere Anwendungsfälle wie diese zu suchen :) – subiet
@subiet Ich habe den Artikel nicht gelesen, klassisches Beispiel, es scheint fast wie eine exakte Kopie einfügen :). Wie auch immer, wenn Sie mit Algorithmen, Knoten und Graphen arbeiten, wird memo verwendet, um die sogenannte rekursive Komplexität zu entfernen (besonders nützlich bei der Partitionierung und Suche). – luke14free
Es gibt eine Reihe von Einbau-Dekorateure, die nützlich sein können, wie classmethod
, property
, staticmethod
und functools.wrap
. Es ist oft praktisch, einen Dekorator zu schreiben, der die Verwendung von Funktionen für Debugging-Zwecke protokolliert. Es gibt viele Beispiel-Dekoratoren auf this Python wiki page, obwohl ich denke, zumindest einige von diesen sind mehr darauf ausgerichtet, zu zeigen, wie flexibel Python ist, als tatsächlich nützliche Funktionalität zu bieten.
Da Python 3 Typ Anmerkungen unterstützt, können Dekoratoren als eine Möglichkeit zur Überprüfung verwendet werden.
def check(f):
def _f(x):
if type(x) != f.__annotations__['x']:
raise TypeError(type(x))
val = f(x)
if 'return' in f.__annotations__ and f.__annotations__['return'] != type(val):
raise TypeError(type(val))
return val
return _f
@check
def f(x: int) -> int:
return x * 2
>>> f(2)
4
>>> f('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in _f
TypeError: <class 'str'>
- 1. Was sind typische Anwendungsfälle der Flags --merge und --keep von git-reset?
- 2. Anwendungsfälle für std :: error_code
- 3. Anwendungsfälle für IdentityHashMap
- 4. Praktische Anwendungsfälle für ConcurrentHashMap
- 5. Anwendungsfälle für std :: add_const und ähnliche
- 6. Anwendungsfälle für Streams in Scala
- 7. Anwendungsfälle für Clojure in Projekten
- 8. Anwendungsfälle für doctest erweiterte API
- 9. Anwendungsfälle für Google Prediction API
- 10. Korrekte Syntax und Anwendungsfälle für MetaWhere in_all und in_any
- 11. Was ist eine typische Versionierungsstrategie für RabbitMQ?
- 12. Anwendungsfälle von PipedInputStream und PipedOutputStream
- 13. Beschleunigungsschwelle für Shake gegen typische Handbewegung?
- 14. Winforms-Anwendungsmenü und Anwendungs-Benutzeroberfläche
- 15. Schüttelsieb Anwendungs
- 16. Anwendungsfälle für vue.js-Richtlinie vs Komponente?
- 17. Was sind die typischen Anwendungsfälle für vi?
- 18. Was sind die Anwendungsfälle für Pythons __new__?
- 19. Was sind Anwendungsfälle für Git-Namespaces?
- 20. MongoDB 3.2 - Anwendungsfälle für updateOne über findOneAndUpdate
- 21. Graph Färbung Algorithmus: typische Planungsproblem
- 22. NoSQL-Technologien, Anwendungsfälle, Stärken und Schwächen
- 23. Häufige Anwendungsfälle für Essiggurken in Python
- 24. Definieren von Knotenagendajobs für diese Anwendungsfälle
- 25. Was sind einige Anwendungsfälle für Tuple-Strukturen?
- 26. Reale Welt Anwendungsfälle für Stateful Session EJB
- 27. Anwendungs-Plugin
- 28. Was sind UDP-Anwendungsfälle?
- 29. Verwenden von Fehlernummern für Anwendungs-/Bibliotheksfehlerberichte
- 30. Anwendungsfälle von Object.create (null)?
möglich Duplikat [Was für memoization gut ist, und es ist alles wirklich so hilfreich?] (Http://stackoverflow.com/questions/3242597/what-is-memoization-good-for-and-is -it-wirklich-all-das-hilfreich) – detly
Ich realisiere, dass Duplikat nicht Python-spezifisch ist, aber ich denke, es beantwortet Ihre Frage. – detly
@detly Eigentlich nein, meine Frage geht überhaupt nicht um Memoisierung, ich wollte nur mit einem Beispiel illustrieren. Meine Frage bezieht sich speziell auf Python Decorators und ihre guten Anwendungsfälle wie Memoization – subiet