En Python, une sorte de tuple « spécial » est nommée « tuple nommé ». Les débutants en Python sont souvent perplexes, en particulier quand et pourquoi nous devons l'implémenter.
Parce qu'un NamedTuple est un tuple, il peut exécuter toutes les fonctions qu'un tuple peut exécuter. C’est cependant plus qu’un simple tuple Python. Dans d'autres langages informatiques, tout comme en C++, cela ressemble beaucoup plus à une « classe ». Il s'agit d'un sous-type de tuple avec des champs spécifiés et une longueur définie, construit par programme selon nos spécifications. Ce tutoriel expliquera Python NamedTuples et montrera comment les utiliser et quand et pourquoi nous devons les utiliser.
Qu'est-ce qu'un tuple Python ?
Nous pensons que nous devrions revoir les tuples en Python avant de continuer.
Un tuple en Python est un conteneur pouvant stocker de nombreuses valeurs. Considérons le cas suivant.
Code
numbers = (34, 32, 56, 24, 75, 24)
Comme nous pouvons le voir, nous utilisons des parenthèses pour le définir. Les index sont utilisés pour accéder aux éléments. (Gardez à l'esprit que l'indexation en Python commence à zéro.)
Code
numbers[1]
Sortir:
32
Un tuple Python number[1] est séparé par le fait que nous ne pouvons pas modifier ses éléments, c'est-à-dire que les éléments du tuple sont immuables.
Syntaxe Python NamedTuple
Nous devons d'abord importer un NamedTuple depuis le module intégré de Python appelé collections, comme indiqué :
from collections import namedtuple
Voici la syntaxe de base pour construire un NamedTuple :
namedtuple(Name,[Names of Values])
Nom c'est le paramètre du titre que nous voulons donner à notre NamedTuple, et
[Noms des valeurs] est un espace réservé pour la liste contenant les noms des différentes valeurs ou attributs.
Exemple Python NamedTuple
La première étape, comme indiqué précédemment, consiste à importer NamedTuple.
from collections import namedtuple
Nous pouvons maintenant utiliser la syntaxe de la partie précédente pour construire un NamedTuple :
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
Dans cet exemple,
fonction d'appel javascript depuis HTML
Nous choisissons d'appeler l'étudiant NamedTuple et mentionnons les noms des valeurs, « Nom », « Classe », « Âge », « Sujet » et « Marques » dans une liste. Et nous avons créé notre premier NamedTuple - Student.
Maintenant, nous pouvons créer une maison Student1 avec les spécifications requises en utilisant Student comme suit :
monflixr
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Seules les valeurs ou le contenu spécifiques que doivent prendre les étiquettes ou les champs de nos [Noms des valeurs] sont requis.
Pour saisir un nouvel étudiant, par exemple Student2, copiez ses valeurs et collez-les dans les champs de la nouvelle variable.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Nous verrons que nous pouvons utiliser Student comme modèle pour enregistrer les nouveaux étudiants à notre guise sans avoir à appeler les étiquettes des champs à chaque fois.
Comment obtenir les valeurs d'un NamedTuple à l'aide de la notation par points
Nous pouvons utiliser la méthode dot pour obtenir les valeurs des instances NamedTuple Student1 et Student2. Voici la syntaxe :
.
L'exemple de code suivant illustre cela :
Code
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Sortir:
15 11 'English' 79 'Itika'
De même, nous pouvons récupérer les variables liées au NamedTuple Student2 en utilisant Student2.Age, Student2.Class, etc.
Les méthodes d'accès de NamedTuple
Nous pouvons récupérer les valeurs de NamedTuple en utilisant des indices, des mots-clés et la fonction getattr(). Les valeurs des champs de NamedTuple sont strictement ordonnées. En conséquence, nous pouvons utiliser les indices pour les trouver.
Les noms de champs sont convertis en attributs par NamedTuple. Par conséquent, getattr() peut être utilisé pour récupérer les données de ce champ.
Code
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #Adding two participants p1 = Participant('Itika', '21', 'India') p2 = Participant('Arshia', '19', 'Australia') #Accessing the items using index print( 'The name and country of the first participant are: ' + p1[0] + ' and ' + p1[2]) #Accessing the items using name of the field print( 'The name and country of the second participant are: ' + p2.Name + ' and ' + p2.Country) #Accessing the items using the method: getattr() print( 'The Age of participant 1 and 2 are: ' + getattr(p1, 'Age') + ' and ' + getattr(p2, 'Age'))
Sortir:
The name and country of the first participant are: Itika and India The name and country of the second participant are: Arshia and Australia The Age of participant 1 and 2 are: 21 and 19
Procédures de conversion de NamedTuple
Différentes collections peuvent être converties en NamedTuple en utilisant quelques techniques. Nous pouvons également utiliser la fonction _make() pour transformer une liste, un tuple ou d'autres objets itérables en une instance NamedTuple.
Nous pouvons également convertir un objet de type de données dictionnaire en une collection NamedTuple. L'agent ** est requis pour cette transformation.
En tant qu'élément de type de données OrderedDict, NamedTuple peut générer des éléments avec ses clés. Nous pouvons appeler la fonction _asdict() pour la convertir en OrderedDict.
Code
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #List to Participants list_ = ['Itika', '21', 'India'] p1 = Participant._make(list_) print(p1) #Dict to convert Employee dict_ = {'Name':'Arshia', 'Age' : '19', 'Country' : 'Australia'} p2 = Participant(**dict_) print(p2) #Displaying the namedtuple as dictionary participant_dict = p1._asdict() print(participant_dict)
Sortir:
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
Plus d'opérations sur NamedTuple
D'autres méthodes, telles que _fields() et _replace, sont disponibles. Nous pouvons déterminer les champs d'un NamedTuple en appelant la fonction _fields(). La fonction _replace() est utilisée pour échanger une valeur contre une autre.
Code
touches de modification
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #List to Participants p1 = Participant('Itika', '21', 'India') print(p1) print('The fields of Participant: ' + str(p1._fields)) #updating the country of participant p1 p1 = p1._replace(Country = 'Germany') print(p1)
Sortir:
Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany')
Comment fonctionne NamedTuple de Python ?
Voyons ce que nous pouvons accomplir de plus avec un NamedTuple en Python.
1. Un NamedTuple en Python est immuable.
Un NamedTuple en Python ne peut pas être modifié, tout comme sa version ordinaire. Nous ne pouvons pas modifier ses caractéristiques.
Nous allons tenter de modifier l'une des caractéristiques d'un tuple du nom 'Student' pour le démontrer.
Code
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11
Sortir:
AttributeError Traceback (most recent call last) Input In [41], in () 2 Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) 3 Student1 = Student('Arshia', 12, 17, 'Maths', 93) ----> 4 Student1.Class = 11 AttributeError: can't set attribute
Comme on peut le voir, il renvoie une AttributeError. En conséquence, nous pouvons en déduire qu’un NamedTuple est immuable.
2. Création d'un dictionnaire Python à partir d'un Python NamedTuple
En Python, un NamedTuple est similaire à un dictionnaire, et nous pouvons le transformer en un seul en :
Code
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() )
Sortir:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
Nous utilisons le. asdict() pour cela. Cela produit également un Python OrderedDict.
3. NamedTuple avec valeurs par défaut
Une classe de tuple nommée peut être configurée avec des paramètres par défaut de la même manière que nous pouvons définir des valeurs initiales pour les attributs d'une classe normale. Les valeurs par défaut sont attribuées aux attributs les plus à droite puisque les champs ayant une valeur par défaut doivent apparaître après chaque champ sans valeur par défaut.
Redéfinissons la classe Student avec une seule entrée par défaut.
Code
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Sortir:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
Le chiffre par défaut 100 sera appliqué pour les marques, qui sont le champ le plus à droite de notre déclaration si nous créons le NamedTuple avec une seule valeur.
La valeur par défaut de l'âge sera-t-elle appliquée si nous spécifions expressément que le champ est l'âge ?
Code
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') Student1 = Student(Age = 18) print ( Student1 )
Sortir:
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
La réponse est non. Dans un NamedTuple, l'ordre des champs est très rigide. Même si nous déclarons expressément quelque chose, les valeurs par défaut doivent être les plus à droite pour éviter toute ambiguïté et difficultés potentielles.
Avantages de Python Namedtuple
Bien sûr, personne n’utilisera NamedTuple s’il n’y voit aucun avantage. Voici donc ce que nous avons :
1. Contrairement à un tuple standard, un NamedTuple en Python peut récupérer des variables par leurs titres.
Code
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Sortir:
17
2. Parce qu'il n'inclut pas de dictionnaires par instance, Python NamedTuple est efficace en mémoire tout comme un tuple conventionnel. C'est également plus rapide qu'un dictionnaire pour cette raison.
commande arp-a
Conclusion
Nous avons appris comment NamedTuples nous permettent de combiner les avantages des tuples et des dictionnaires, comment créer des NamedTuples et comment les utiliser dans ce didacticiel. Comment récupérer les valeurs de NamedTuples en utilisant la notation par points en Python, comment ils fonctionnent
Si le lecteur connaît la POO de Python, il verra que celle-ci est identique au fonctionnement des classes Python. Une classe et ses attributs servent de modèle pour créer de nombreux autres objets ou instances, chacun avec son propre ensemble de valeurs d'attribut.
Cependant, pour augmenter la clarté de notre code, définir une classe et fournir les caractéristiques essentielles est généralement excessif, et il est beaucoup plus rapide de construire des NamedTuples à la place.