Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Python-benannte Tupel

So verwenden Sie Python-benannte Tupel

王林
王林nach vorne
2023-05-02 23:13:051533Durchsuche

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)
  • 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)

Konvertieren Sie das Wörterbuch in ein benanntes Tupel:

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

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': e13446bebb88208a1ed1b67eb6c71d15, 'g':

  • 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)

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)

    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)

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen