collections.namedtuple wird verwendet, um Tupel mit Feldnamen zu erstellen. Der entsprechende Typ ist typing.NamedTuple (kann als Superklasse verwendet werden).
Definition des benannten Tupelobjekts:
collections.namedtuple(typename, field_names, verbose=False, rename=False, defaults=None, module=None):
typename: Tupelname
field_names: ist eine Feldsequenz (zum Beispiel [‘x’, ‘y’]);
rename: Wenn wahr, werden ungültige Feldnamen (zum Beispiel doppelte Namen oder Schlüsselwörter) automatisch durch ersetzt Positionsname (z. B. _1);
Standardwerte: Wenn es sich um ein iterierbares Objekt handelt, entspricht es wiederum dem Standardwert des Feldes in Feldnamen aus einem iterierbaren Objekt (Iterable) Benanntes Tupel:
from collections import namedtuple Color = namedtuple("Color", "r g b alpha") def convert_to_color(desc: str, alpha: float = 0.0): if desc == "green": return Color(r=50, g=205, b=50, alpha=alpha) elif desc == "blue": return Color(r=50, g=0, b=255, alpha=alpha) else: return Color(r=50, g=0, b=0, alpha=alpha)
Änderung des benannten Tupels: Der darin enthaltene Wert kann nicht direkt geändert werden durch _replace:
c = Color._make([10, 20, 30, 0.1]) nc = Color._make((10, 20, 30, 0.1)) print("r:", c.r)
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5} nc = c._replace(r=100)
Benanntes Tupel In Wörterbuch konvertieren (über die _asdict-Methode):
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5} nc = Color(**c)
Benanntes Tupel In Tupel konvertieren:
c = Color(r=50, g=0, b=0, alpha=0.5) d = c._asdict()
Properties
Attribut __annotations__ enthält ein Wörterbuch von Feldern und entsprechenden Typen: wie {'r':
Attribute _field_defaults garantiert Felder mit Anfangswerten und ein Wörterbuch mit Anfangswerten: so as { 'alpha': 0.0};
Sortieren
c = Color(r=50, g=0, b=0, alpha=0.5) t = tuple(c)
Dictionary dict ist eine sehr allgemeine Datenstruktur , Sehr leicht zu missbrauchen und weist im Vergleich zu „namedtuple“ die folgenden Probleme auf:
Das Wörterbuch ist nicht hashbar und kann daher nicht in einem Satz oder anderen Wörterbüchern gespeichert werden.
Das Wörterbuch ist veränderlich und bei Bedarf kann eine beliebige Zahl hinzugefügt werden. Neue Schlüssel für;
Ähnlich wie bei dict können in benannten Tupeln einzelne Variablen zugewiesen und nach Bedarf verwendet werden. Allerdings:
Datenklasse
Einzelheiten zu Datenklassen finden Sie unter „Einführung in Datenklassen“.
Die Datenklasse wurde in Python 3.7 eingeführt und kann als „variables benanntes Tupel mit Standardwert“ betrachtet werden:
kann einfach ein Dokument hinzufügen;
kann definiert und ein Feld ausgewählt werden;
from operator import attrgetter colors = [ Color(r=50, g=205, b=50, alpha=0.1), Color(r=50, g=205, b=50, alpha=0.5), Color(r=50, g=0, b=0, alpha=0.3) ] out = sorted(colors, key=attrgetter("alpha")) print(out)
NamedTuple erben
from dataclasses import dataclass # frozen设为true后,字段内容将不允许修改(与namedtuple完全类似) # 否则可修改字段;并可任意添加字段(如,c.n=1); @dataclass(frozen=True) class DColor: """A regular class that represents a color.""" r: float g: float b: float alpha: float = 0.0 # c = DColor(r=10, g=20, b=30) c = DColor(10, 20, 30)
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Python-benannte Tupel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!