Comment utiliser des tuples nommés Python

王林
Libérer: 2023-05-02 23:13:05
avant
1527 Les gens l'ont consulté

collections.namedtuple est utilisé pour construire des tuples avec des noms de champs. Le type correspondant est typing.NamedTuple (peut être utilisé comme superclasse).

nommé Tuple

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)
    Copier après la connexion
  • Opération de tuple
  • 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)
    Copier après la connexion
  • Convertir le dictionnaire en un tuple nommé :
  • c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
    nc = c._replace(r=100)
    Copier après la connexion

    Tuple nommé Convertir en dictionnaire (via la méthode _asdict) :

    c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
    nc = Color(**c)
    Copier après la connexion
  • Tuple nommé Convertir en tuple :
c = Color(r=50, g=0, b=0, alpha=0.5)
d = c._asdict()
Copier après la connexion

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' : , 'g' : , 'alpha' : };

Attribut _field_defaults garantit des champs avec des valeurs initiales et un dictionnaire de valeurs initiales : tel as { 'alpha': 0.0};

  • Trier

  • Tri des tuples nommés : le champ de tri peut être spécifié via l'attribut dans la bibliothèque de l'opérateur :
  • c = Color(r=50, g=0, b=0, alpha=0.5)
    t = tuple(c)
    Copier après la connexion

    Comparaison avec le dictionnaire

  • Le dictionnaire dict est une structure de données très générale , très Il est facile d'en abuser, et par rapport au nommé tuple, il présente les problèmes suivants :
  • Le dictionnaire n'est pas hachable, il ne peut donc pas être stocké dans un ensemble ou d'autres dictionnaires

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 :

    namedtuple est immuable et de nouvelles valeurs (clés) ne seront pas ajoutées accidentellement ;
  • Classe de données

  • Pour plus de détails sur les classes de données, veuillez vous référer à "Introduction aux classes de données".
  • modification de la classe de données

  • La classe de données a été introduite dans python3.7, qui peut être considérée comme un "tuple de variable nommé avec une valeur par défaut" :

peut facilement ajouter un document

peut être défini Sélectionnez un champ ;

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)
Copier après la connexion

Inherit NamedTuple

Il 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 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)
    Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!