Maison > Article > développement back-end > Comment utiliser des tuples nommés Python
collections.namedtuple est utilisé pour construire des tuples avec des noms de champs. Le type correspondant est typing.NamedTuple (peut être utilisé comme superclasse).
Definition de l'objet NamedTuple:
Collections.NamedTuple (typename, field_ames, verbose = false, rename = false, defaults = non, module = non field_names : est une séquence de champs (par exemple, [‘x’, ‘y’]) ;
rename : lorsqu'ils sont vrais, les noms de champs non valides (par exemple, noms ou mots-clés en double) seront automatiquement remplacés par le nom de position (par exemple, _1) ;
defaults : la valeur par défaut du champ s'il s'agit d'un objet itérable, elle correspond à la valeur par défaut du champ dans field_names à son tour ; à partir d'un objet itérable (Iterable) Tuple nommé :
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)
Modification de tuple nommé : La valeur à l'intérieur ne peut pas être modifiée directement Vous pouvez en construire une nouvelle via _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)
Tuple nommé Convertir en dictionnaire (via la méthode _asdict) :
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5} nc = Color(**c)
c = Color(r=50, g=0, b=0, alpha=0.5) d = c._asdict()
Properties
Properties _fields Un tuple contenant tous les champs : tels que ('r', 'g', ' b', 'alpha');
l'attribut __annotations__ contient un dictionnaire de champs et de types correspondants : tels que {'r' : e13446bebb88208a1ed1b67eb6c71d15, 'g' : Trier Comparaison avec le dictionnaire Le dictionnaire est mutable ; , et n'importe quel nombre peut être ajouté selon les besoins. Nouvelles clés pour Semblable à dict, les valeurs du tuple nommé peuvent être attribuées à des variables individuelles et utilisées selon les besoins. Cependant : Classe de données modification de la classe de données peut facilement ajouter un document peut être défini Sélectionnez un champ ; Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!Attribut _field_defaults garantit des champs avec des valeurs initiales et un dictionnaire de valeurs initiales : tel as { 'alpha': 0.0};
c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)
namedtuple est immuable et de nouvelles valeurs (clés) ne seront pas ajoutées accidentellement ;
Inherit NamedTupleIl peut également être facilement défini en héritant de NamedTuple (en même temps, la valeur initiale du champ peut être définie, et les champs avec des valeurs initiales doivent suivre les champs non initiaux) : 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)
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)