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 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
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
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
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
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
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
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
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.
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