Was macht das "at" (@) Symbol in Python?

Ich sehe einen Python-Code an, der das @ -Zeichen verwendet hat, aber ich habe keine Ahnung, was es tut. Ich weiß auch nicht, was zu suchen, da die Suche nach Python-Dokumenten oder Google keine relevanten Ergebnisse zurückgibt, wenn das @ -Zeichen enthalten ist.

8 Solutions collect form web for “Was macht das "at" (@) Symbol in Python?”

Das @ -Zeichen wird für Klassen-, Funktions- und Methodendekorateure verwendet.

Lesen Sie hier mehr:

PEP 318: Dekorateure

Python Dekorateure

Die gebräuchlichsten Python-Dekorateure, die du dir führen wirst:

@Eigentum

@ Classmethod

@staticmethod

Präambel

Ich gebe zu, dass es mehr als ein paar Momente gedauert hat, um dieses Konzept für mich voll zu begreifen, also werde ich teilen, was ich gelernt habe, andere die Mühe zu retten.

Der Name Dekorateur – die Sache, die wir mit der @ Syntax vor einer Funktionsdefinition definieren – war wohl der Hauptschuldige hier.

Beispiel

 class Pizza(object): def __init__(self): self.toppings = [] def __call__(self, topping): # when using '@instance_of_pizza' before a function def # the function gets passed onto 'topping' self.toppings.append(topping()) def __repr__(self): return str(self.toppings) pizza = Pizza() @pizza def cheese(): return 'cheese' @pizza def sauce(): return 'sauce' print pizza # ['cheese', 'sauce'] 

Was dies zeigt, ist, dass die function / method / class Sie definieren, nachdem ein Dekorateur gerade grundsätzlich als argument der function / method sofort nach dem @ -Zeichen weitergegeben wird.

Erste Sichtung

Die microframework Flask stellt Dekorateure von Anfang an in folgendem Format vor:

 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" 

Dies wiederum bedeutet:

 rule = "/" view_func = hello # they go as arguments here in 'flask/app.py' def add_url_rule(self, rule, endpoint=None, view_func=None, **options): pass 

Das verwirklichte es mir endlich, mich in der Flucht zu fühlen.

Dieses Code-Snippet:

 def decorator(func): return func @decorator def some_func(): pass 

Entspricht diesem Code:

 def decorator(func): return func def some_func(): pass some_func = decorator(some_func) 

In der Definition von Dekorateur können Sie einige modifizierte Dinge hinzufügen, die nicht von der Funktion normal zurückgegeben werden.

In python3.5 kannst du @ als Operator überladen. Es wird als __matmul__ weil es entworfen ist, um Matrixmultiplikation zu machen, aber es kann alles sein, was du willst. Siehe PEP465 für Details.

Dies ist eine einfache Implementierung der Matrixmultiplikation.

 class Mat(list) : def __matmul__(self, B) : A = self return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B))) for j in range(len(B[0])) ] for i in range(len(A))]) A = Mat([[1,3],[7,5]]) B = Mat([[6,8],[4,2]]) print(A @ B) 

Dieser Code ergibt sich

 [[18, 14], [62, 66]] 

Als ich anfing zu antworten, habe ich die erste Antwort nicht gesehen, ist genau das, als du brauchst, respektvoll in Java ist ein anderes Konzept und wie kannst du zum Beispiel hier java, Annotation Tutorial lesen

In Java ist dies eine Annotation und wie man lesen kann, ist ganz anders als in python sorry für die Mühe.

Bearbeiten: Original Post und wie in den Kommentaren sagte ich einen Fehler mit der Option, die ich wählen. Es ist ein Dekorateur wie in der Java-Sprache, mit der du es benutzt hast für die Deklaration und Verwendung von abstrakten Methoden. Der Unterschied ist, als in Python die abstrakte Methode eine Implementierung haben könnte.

Definition von docs.python.org

Ausgehend von Python 3.5 wird das '@' als dediziertes Infix-Symbol für MATRIX MULTIPLICATION verwendet (PEP 0465 – siehe https://www.python.org/dev/peps/pep-0465/ )

Es zeigt an, dass Sie einen Dekorateur verwenden. Hier ist das Beispiel von Bruce Eckel aus dem Jahr 2008.

Um zu sagen, was andere anders haben: ja, es ist ein Dekorateur.

In Python ist es wie:

  1. Erstellen einer Funktion (folgt unter dem @ call)
  2. Aufruf einer anderen Funktion, um auf Ihre erstellte Funktion zu arbeiten. Dies gibt eine neue Funktion zurück. Die Funktion, die Sie anrufen, ist das Argument des @.
  3. Ersetzen der mit der neuen Funktion definierten Funktion.

Dies kann für alle Arten von nützlichen Dingen verwendet werden, möglich gemacht, weil Funktionen Objekte sind und nur notwendige nur Anweisungen.

  • Python-Tupel-Nachlauf-Komma-Syntaxregel
  • Bedingter Betreiber in Python?
  • Python Literal r '\' Nicht akzeptiert
  • So geben Sie die vorherige Wahrscheinlichkeit für die Naive Bayes von scikit-learn an
  • Was bedeutet es + = in python
  • Wie kann ich in Python einen Zeilenumbruch machen (Zeilenfortsetzung)?
  • Python: Zugriffsklasseneigenschaft aus String
  • Was bedeutet print (... sep = '', '\ t') bedeutet?
  • Was bedeutet dieser Code: "print >> sys.stderr"
  • Python-Einrückungsfehler in if / else-Anweisung
  • String-Formatierung benannte Parameter?
  • Python ist die beste Programmiersprache der Welt.