[PYTHON] Ich habe PEP 614 (Lockerung der Grammatikbeschränkungen für Dekorateure) gelesen.

Neulich wurde PEP 614 (Lockerung der Grammatikbeschränkungen für Dekorateure) zu Final Commitment / python / peps / pull / 1437) Ich habe es gesehen. Also werde ich diesmal PEP 614 lesen.

Überblick

  buttons = [QPushButton(f'Button {i}') for i in range(10)]

  @buttons[0].clicked.connect  # => NG
  def spam():
      ...

Ansatz

Die Grammatik bisher

decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE

Es war

decorator: '@' namedexpr_test NEWLINE

Gewechselt zu. das ist alles.

Das ist schwer zu verstehen. namedexpr_test ist ein grammatikalisches Element, das auf einen Python-Ausdruck verweist. Die Ausdrücke lauten wie folgt (aus 6. Ausdrücke - Python 3.8.3-Dokumentation).

Es gibt verschiedene Dinge. Diese sind jetzt für Dekorateure verfügbar. Bitte beachten Sie, dass einige Definitionen möglicherweise nicht verfügbar sind (z. B. Warten).

Beispiel

Versuchen Sie es mit einem Lambda-Ausdruck für den Dekorateur ...

>>> @lambda f: f
... def foo(): pass
...

Versuchen Sie es mit dem ternären Operator, wenn sonst ...

>>> x = lambda f: f
>>> y = lambda f: f
>>> @x if True else y
... def foo(): pass
...

Natürlich können Sie auch Arrays verwenden.

>>> deco = [lambda f: f]
>>> @deco[0]
... def foo(): pass
...

Impressionen

  >>> @x := staticmethod  #Substitutionsformel(3.Ab 9)
  ... def foo(): pass
  ...

Recommended Posts

Ich habe PEP 614 (Lockerung der Grammatikbeschränkungen für Dekorateure) gelesen.
Ich habe PEP 613 (Explicit Type Aliases) gelesen.
Ich habe PEP 612 (Parameter Specification Variables) gelesen.
Ich habe PEP 604 (Komplementäre Syntax für Union []) gelesen.
Ich habe PEP-362 (Function Signature Object) gelesen.
Ich habe PEP 618 gelesen (Optionale Längenprüfung zum Reißverschluss hinzufügen)
Ich habe PEP 584 gelesen (Add Union Operators To dict)
Ich habe PEP-593 gelesen (Flexible Funktion und variable Anmerkungen)
Ich habe ein Einführungsbuch über die Verarbeitung natürlicher Sprache gelesen
Ich las PEP-544 (Protokolle: Strukturelle Subtypisierung (statische Ententypisierung))
Ich habe PEP 585 gelesen (Type Hinting Generics In Standard Collections)