Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden

Was ist der Seiuchi-Operator?

Als ich neulich den Trend der Artikel über Qiita betrachtete, sah ich etwas namens "Seiuchi Operator". Der Seiuchi-Operator selbst ist eine neue Syntax für Python, aber ich habe die neuesten Spezifikationen nicht wirklich befolgt. In der Vergangenheit schrieb ich einen Artikel "Vielleicht kenne ich die Welt der Python-Minor-Grammatik nicht", aber ich möchte mein Wissen bald aktualisieren. Also habe ich mich entschlossen, der kürzlich hinzugefügten Grammatik zu folgen. Wenn Sie nur die Programmiersprache berühren, können Sie normalerweise etwas tun, wenn Sie sich an die Funktionsdefinition oder Klassendefinition erinnern. Wenn Sie sie jedoch kurz und ordentlich schreiben möchten, ist es sehr effektiv, eine dedizierte Syntax zu verwenden. Für mich mag ich Python, weil es eine ausgezeichnete Wahl ist. Ich werde hier nicht alles vorstellen, aber es scheint für mich einfach zu sein. Ich werde nur das aufgreifen, was ich denke.

PEP 448-Generalisierung zum addierbaren Auspacken

PEP 448 erweitert die Verwendung des Operators * iterable entpacking und des Operators ** dictionary entpacken. Kann jetzt mit einer beliebigen Anzahl von Entpackungen in Funktionsaufrufen verwendet werden:

Hallo. Ich dachte. In der Python 2.7-Serie ist das Verhalten beispielsweise wie folgt.

>>> def f(a,b,c,d):
...     return 1
...
>>> f(*[0,1,2,3])
1
>>> f(*[0,1],*[2,3])
  File "<stdin>", line 1
    f(*[0,1],*[2,3])
             ^
SyntaxError: invalid syntax

Beim Aufrufen einer Funktion beim Entpacken einer Liste mit * auf diese Weise konnte nur eine Liste angegeben werden. Seit Python 3.5 funktioniert jedoch mehr als eine.

>>> def f(a,b,c,d):
...     return 1
...
>>> f(*[0,1,2,3])
1
>>> f(*[0,1],*[2,3])
1

Oh. Die offizielle Python-Dokumentation enthält auch Beispiele für Taples und Wörterbücher, wie z.

>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}

>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}

Ein wenig interessant ist, dass Sie auch einen Generator wie "range (4)" erstellen können.

Eingeführt: Python3.5

PEP 498: Formatiertes String-Literal

Ein formatiertes String-Literal ähnelt einem formatierten String mit str.format () mit dem Präfix 'f'. Diese haben Ersatzfelder in geschweiften Klammern. Substitutionsfelder sind Ausdrücke, die zur Laufzeit ausgewertet und vom format () -Protokoll formatiert werden:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

Dies ist normalerweise praktisch. Wenn es sich um eine Zeichenfolge mit "f" am Anfang handelt, wird die Zeichenfolge nur durch Schreiben im Format "{name}" erweitert. Dies war früher eine kurze Hand

name = "Fred"
"He said his name is {name}.".format(**locals())

Ich konnte so etwas schreiben, aber wenn es so nervig ist, ist % in Ordnung. Ich habe es nicht benutzt. Mit der Einführung der Zeichenfolge f ist die Anzahl der Tastenanschläge jedoch überwiegend geringer.

Die Python-Formel enthielt auch ein komplexes Beispiel für das Verschachteln des Teils {}}.

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'

Nach einem kleinen Test wird es jedoch nicht erneut erweitert, nachdem es in die Variable eingefügt wurde.

>>> template = "{name}"
>>> f"{template}"
'{name}'

(Nun, wenn Sie das versuchen, scheint es, dass das Tuling nur mit der f-Zeichenfolge abgeschlossen ist ...)

Einführung: Python3.6

PEP 515: Unterstrich im numerischen Literal

Mit PEP 515 können Sie zur besseren Lesbarkeit Unterstriche in numerischen Literalen verwenden.

>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

Nun, ich benutze es nicht viel im Geschäftsleben ... Wenn ich jedoch in einem numerischen Berechnungssystem um die Schleife laufe, ist es schwer zu sagen, ob es 100.000 oder 1 Million sind, also ist das gut.

Einführung: Python3.6

PEP 553: Eingebauter Haltepunkt ()

Es ist keine Grammatik, aber ich werde es einführen, weil es sehr praktisch zum Debuggen ist.

break.py


i = 1
print(i)
breakpoint()
i += 1
print(i)

Angenommen, Sie schreiben den Code. Wenn Sie dies tun,

$ python break.py
1
> /home/kotauchisunsun/work/python_practice/break.py(4)<module>()
-> i += 1
(Pdb) i
1

Auf diese Weise wird pdb ausgeführt, wenn Sie breakpoint () aufrufen, und Sie können den Inhalt der Variablen überprüfen. Es spielt keine Rolle, ob die IDE integriert ist, aber es kann nützlich sein, wenn Sie dies nur über die Befehlszeile tun möchten.

Eingeführt: Python 3.7

Speichern Sie die Einfügereihenfolge von diktierten Objekten

Die Eigenschaft, die Einfügereihenfolge von diktierten Objekten beizubehalten, wurde offiziell als Teil der Python-Sprachspezifikation deklariert.

Wie ich aus dem Artikel Neue Lieblingsfunktionen von Python 3.7 erfahren habe, werden ** Wörterbuchtypen jetzt in der richtigen Reihenfolge gespeichert. ** Ja wirklich?

Für Python2.7

$ python2.7
Python 2.7.17 (default, Nov  7 2019, 10:07:09)
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> {"c":1,"b":2,"a":3}.keys()
['a', 'c', 'b']
>>> {"a":1,"b":2,"c":3}.keys()
['a', 'c', 'b']

Für die Python3.8-Serie

$ python
Python 3.8.0 (default, Jun 27 2020, 00:43:29)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> {"c":1,"b":2,"a":3}.keys()
dict_keys(['c', 'b', 'a'])
>>> {"a":1,"b":2,"c":3}.keys()
dict_keys(['a', 'b', 'c'])

Früher gab es "OrderedDict" in Sammlungen als eine ihm gewidmete Klasse, aber "dict" ist in der Reihenfolge der Einfügung, nicht wahr? Dies ist eine gute Sache, aber ** umgekehrt scheint es, dass Sie von dem Code abhängig sind, der unter der Annahme der Python 3.7-Serie geschrieben wurde, wenn Sie ihn zur Python 3.5-Serie bringen. ** Es scheint besser, diese Änderung im Auge zu behalten.

Eingeführt: Python 3.7

Seiuchi-Betreiber

Als Teil der größeren Syntax wurde eine neue Syntax: = hinzugefügt, um Variablen Werte zuzuweisen. Diese Syntax ähnelt den Augen und Zähnen eines Seuchi, daher der Spitzname "Seuchi-Operator".

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

Hmmm dieses offizielle Beispiel? Ich war nicht so glücklich, aber das folgende Beispiel war gut.

[clean_name.title() for name in names
 if (clean_name := normalize('NFC', name)) in allowed_names]

Dieses Beispiel ist gut. Ich dachte, dass es die alte Art zu schreiben war

normailze_name_list = map(x: normalize('NFC',x),names)
clean_name_list = filter(x: x in allowed_names, normalize_name_list)
[x.title() for x in clean_name_list]

Es gab viele redundante Teile wie das Schreiben, aber ich kann es kurz und ordentlich schreiben. Gelegentlich wollte ich das für die Beurteilung verwendete Ergebnis als if-Aussage des Einschlussausdrucks als Element einbringen, daher ist dies sehr schön.

Eingeführt: Python3.8

Darstellung eines Objekts mit = in f-Zeichenfolge

Der Bezeichner = ist jetzt für formatierte Zeichenfolgenliterale (f-Zeichenfolge) aktiviert. Ein f-String wie f '{expr =}' wird in der Reihenfolge des in f-string geschriebenen Ausdrucks, des Gleichheits-Symbols und der String-Darstellung des ausgewerteten Ausdrucks angezeigt.

user = 'eric_idle'
member_since = date(1975, 7, 31)
f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

Für mich dachte ich: "Warum ...", aber es scheint, dass es eingeführt wurde. Meine persönliche negative Meinung ist, dass dies im Grunde nur für das Debuggen funktioniert, und es ist eine Syntax, die nicht wirklich in den Produktionscode passt, also hmm. Ich dachte. Gibt es eine andere Verwendung? Ich habe mir die ursprüngliche Diskussion angesehen, aber sie scheint hauptsächlich zum Debuggen gedacht zu sein.

https://bugs.python.org/issue36817

Eingeführt: Python3.8

Impressionen

Wenn ich mir eine relativ neue Sprache anschaue, werden Generika nicht eingegeben. Oder der Null-Koaleszenzoperator ist. Wie wäre es mit dem Elvis-Operator? Ich höre solche Geschichten, aber Python hört sich solche Geschichten nicht an. Es war der Eindruck, dass. Type Hinting ist sicherlich eine große Geschichte, aber es ist eine optionale Geschichte, und async / await wurde von Einzelpersonen nicht oft verwendet und war nicht interessant. Währenddessen betritt eine seltsame Sache namens Seiuchi-Operator Python. Ich war ein wenig fasziniert, also habe ich nachgeschlagen. Ich hoffe, Sie kennen die Grammatik hier. Ich denke, dass es nicht im Einführungsbuch enthalten ist. Kennen Sie solche Dinge, wie Sie gehen, oder wissen Sie in Artikeln wie diesen? Das ist eine ziemlich schwierige Aufgabe. Ich denke.

Referenz

https://docs.python.org/ja/3.5/whatsnew/3.5.html https://docs.python.org/ja/3.6/whatsnew/3.6.html https://docs.python.org/ja/3.7/whatsnew/3.7.html https://docs.python.org/ja/3.8/whatsnew/3.8.html

Recommended Posts

Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden
Neue Funktionen in Python 3.4.0 (3) - Generische Funktionen für den Einzelversand
Ein leicht verständlicher Vergleich der grundlegenden Grammatik von Python und Go
Über den Unterschied zwischen "==" und "is" in Python
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Erhalten Sie das Formular in Python und führen Sie verschiedene Aktionen aus
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
[Selen] Öffnen Sie den Link in einem neuen Tab und verschieben Sie ihn [Python / Chrome-Treiber]
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Den Inhalt der Daten in Python nicht kennen
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
Was ist neu in Python 3.5?
Neu in Python 3.4.0 (1) --pathlib
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
Was ist neu in Python 3.6?
Test.py wird auf dem Webserver in Python3 nicht angezeigt.
Abrufen und Erstellen von Knoten, die in der neuen Version hinzugefügt und aktualisiert wurden
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Bubble Sort)
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Bearbeiten Sie die Zwischenablage in Python und fügen Sie die Tabelle in Excel ein
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
[Python] Zeigt die verstrichene Zeit in Stunden, Minuten und Sekunden an (00:00:00)
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
Ich möchte die Natur von Python und Pip kennenlernen
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Selective Sort)
[Python3] "A // B" und "math.floor (A / B)" sind nicht immer gleich! ??
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.
Finde Fehler in Python
Python-Installation und grundlegende Grammatik
Stapel und Warteschlange in Python
Unittest und CI in Python
Neu in Python 3.4.0 (2) --enum
Was ist neu in Python 3.9 (Zusammenfassung)
Über die Funktionen von Python
Python (Python 3.7.7) Installation und grundlegende Grammatik
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Klicken Sie in Python auf die New Relic-API, um den Status des Servers abzurufen
[Python3] Speichern Sie die Mittelwert- und Kovarianzmatrix in json mit Pandas
Neue Funktionen in Python 3.9 (1) - Der Summensatzoperator kann im Wörterbuchtyp verwendet werden.
Die Geschichte, dass das Ersetzen der zweidimensionalen Liste in Python nicht funktioniert hat
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
Die Geschichte von Python und die Geschichte von NaN
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Abrufen der arXiv-API in Python
Unterschied zwischen list () und [] in Python
Vergleich der grundlegenden Grammatik zwischen Java und Python
Unterschied zwischen == und ist in Python