Neue Änderungen in Python 3.9, die voraussichtlich im Oktober 2020 veröffentlicht werden, sind im Artikel [Was ist neu in Python 3.9 (Zusammenfassung)] zusammengefasst (https://qiita.com/ksato9700/items/d5df9d36147796c86c77). gestartet. Unter diesen habe ich beschlossen, eine relativ große Anzahl von Elementen in einem separaten Artikel auszuschneiden, aber als ersten Schritt möchte ich die Änderung aufgreifen, die es ermöglicht, den Summensatzoperator im Wörterbuchtyp zu verwenden.
Der Wörterbuchtyp ist einer der in Python integrierten Standarddatentypen. In anderen Sprachen wird es unterschiedlich als Hash-Typ, Map-Typ, assoziativer Array-Typ bezeichnet. Der Punkt ist jedoch, dass es sich um einen Datentyp zum Speichern von Name / Wert-Paaren (Schlüssel-Wert-Paaren) handelt.
Beachten Sie, dass es zwei Daten vom Typ Wörterbuch (d1, d2) gibt, die zu Daten vom Typ Wörterbuch gemischt werden. Es gab verschiedene Möglichkeiten, dies zu tun.
Wenn Sie d1.update (d2) `ausführen, werden die Daten des integrierten Wörterbuchtyps überschrieben und in d1 gespeichert. Wenn Sie d1 so lassen möchten, wie es ist
e = d1.copy()
e.update(d2)
Sie müssen eine Kopie erstellen und dann die Methode "update" aufrufen. Es ist ein wenig mühsam.
Als "{** d1, ** d2}" werden die Inhaltsdaten von jedem Wörterbuchtyp abgerufen und in einem neuen Wörterbuchtyp zurückgegeben. Sie können integrierte Wörterbuchdaten ohne Zwischenvariablen erhalten, aber es ist schwer zu sagen, was Sie tun, wenn Sie sich Pat ansehen. Sogar Guido, der ursprüngliche Autor von Python, ist so verwirrend, dass er sagt: "Ich habe vergessen, dass es so etwas gibt" (lacht).
collection.ChainMap
Das Modul "Sammlungen" hat eine Klasse namens "ChainMap". Wenn Sie "dict (ChainMap (d2, d1))" verwenden, können Sie integrierte Wörterbuchdaten abrufen. Das Verwirrende ist, dass im Gegensatz zum obigen Beispiel, wenn Sie denselben Schlüssel haben, der linke Vorrang hat. Obwohl Standard, müssen Sie das Modul "Sammlungen" importieren, und diese Methode ist auch nicht sehr intuitiv.
Im Konstruktor des Wörterbuchtyps befindet sich "dict (Zuordnung, ** kwarg)". Wenn Sie dies also verwenden, um "dict (d1, ** d2)" zu erstellen, erhalten Sie integrierte Wörterbuchtypdaten. Durch Setzen von "** d2" wird der Inhalt von "d2" als Schlüsselwortargumente angegeben und zum Inhalt des ersten Arguments hinzugefügt ("d1" ändert sich nicht). Das Problem bei dieser Methode ist, dass der Inhalt von "d2" als Schlüsselwortargumente angegeben wird, sodass er nur integriert werden kann, wenn der Schlüssel ein String-Wörterbuch-Typ ist.
Für die im Set-Typ verwendeten Operatoren|
Wann|=
Es gibt zum Beispiel, dass Sie es so verwenden können.
>>> a = set((1,2,3))
>>> b = set((3,4,5))
>>> a | b
{1,2,3,4,5}
>>> a |= b
>>> a
{1,2,3,4,5}
Es ist ein Summensatzoperator, da er die "Summe" zweier Sätze berechnet. Die diesmal für 3.9 geplante Änderung besteht darin, diesen Summensatzoperator für die Integration von Wörterbuchdaten zu verwenden.
Die Spezifikation ist sehr einfach und die Summe der beiden Wörterbuchtypdaten wird wie der Set-Typ verwendet. Der Unterschied zu Set besteht in der Entsprechung, wenn sich die Schlüssel überlappen, und selbst wenn sich das Set überlappt, muss nur nicht zweimal gezählt werden. Beim Wörterbuchtyp gibt es jedoch sowohl Werte als auch Schlüssel, sodass diese verwendet werden müssen Wird zum Problem. Bei dieser Änderung wird der Wert auf der rechten Seite der Formel priorisiert. Es ist ein Bild der Überlappung in der Reihenfolge von links und des Überschreibens des Bildes mit demselben Schlüssel.
Es ist schneller, es als Beispiel zu sehen.
>>> c = {'a': 1, 'b': 2}
>>> d = {'b': 3, 'c': 7}
>>> c | d
{'a': 1, 'b': 3, 'c': 7}
>>> d | c
{'a': 1, 'b': 2, 'c': 7}
>>> c |= d
>>> c
{'a': 1, 'b': 3, 'c': 7}
Hierc | d
Mit dem Ergebnis vond | c
Die Tatsache, dass das Ergebnis von unterschiedlich ist (nicht konvertierbar), ist als "Summen" -Operator unangenehm, aber Sie können es nur als solchen betrachten.
Ich werde den Summensatzoperator erläutern, der in den Wörterbuchtyp in Python 3.9 basierend auf dem Inhalt von PEP-584 eingeführt wird. Ich tat. Ich denke, dass ich in vielen Fällen "dict.update" verwendet habe, aber da es den ursprünglichen Wörterbuchtyp bricht, gibt es verschiedene Verwendungsmöglichkeiten, um unveränderliche Operationen in einer leicht verständlichen Notation zu zeichnen.
Recommended Posts