So verwenden Sie Python-benannte Tupel

王林
Freigeben: 2023-05-02 23:13:05
nach vorne
1528 Leute haben es durchsucht

collections.namedtuple wird verwendet, um Tupel mit Feldnamen zu erstellen. Der entsprechende Typ ist typing.NamedTuple (kann als Superklasse verwendet werden).

Benanntes Tupel

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)
    Nach dem Login kopieren
  • Tupeloperation

Ä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)
Nach dem Login kopieren

Konvertieren Sie das Wörterbuch in ein benanntes Tupel:

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = c._replace(r=100)
Nach dem Login kopieren

Benanntes Tupel In Wörterbuch konvertieren (über die _asdict-Methode):

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = Color(**c)
Nach dem Login kopieren

Benanntes Tupel In Tupel konvertieren:

c = Color(r=50, g=0, b=0, alpha=0.5)
d = c._asdict()
Nach dem Login kopieren

Properties

Properties _fields Ein Tupel, das alle Felder enthält: wie ('r', 'g', ' b', 'alpha');

  • Attribut __annotations__ enthält ein Wörterbuch von Feldern und entsprechenden Typen: wie {'r': , 'g': , 'alpha': };

  • Attribute _field_defaults garantiert Felder mit Anfangswerten und ein Wörterbuch mit Anfangswerten: so as { 'alpha': 0.0};

  • Sortieren

  • Benannte Tupelsortierung: Das Sortierfeld kann über den Attrgetter in der Operatorbibliothek angegeben werden:
c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)
Nach dem Login kopieren

Vergleich mit Wörterbuch

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:

  • namedtuple ist unveränderlich und neue Werte (Schlüssel) werden nicht versehentlich hinzugefügt

Datenklasse

Einzelheiten zu Datenklassen finden Sie unter „Einführung in Datenklassen“.

Datenklassenänderung

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)
    Nach dem Login kopieren

    NamedTuple erben

  • Es kann auch einfach durch Erben von NamedTuple definiert werden (gleichzeitig kann der Anfangswert des Felds definiert werden, und Felder mit Anfangswerten müssen auf nicht-anfängliche Felder folgen):
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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!