logo

Navnet Tuple i Python

I Python hedder en 'særlig' slags tuple 'navngivet tuple'. Python-begyndere er ofte forvirrede over det, især hvornår og hvorfor vi skal implementere det.

Fordi en NamedTuple er en tuple, kan den udføre alle de funktioner, som en tuple kan. Det er dog mere end en simpel Python-tupel. På andre computersprog, ligesom med C++, ligner det meget mere en 'klasse'. Det er en undertype af tuple med specificerede felter og en defineret længde bygget programmatisk til vores specifikationer. Denne tutorial vil forklare Python NamedTuples og vise, hvordan man bruger dem, og hvornår og hvorfor vi skal bruge dem.

Hvad er en Python Tuple?

Vi mener, at vi bør gense tuples i Python, før vi fortsætter.

En tuple i Python er en beholder, der kan gemme mange værdier. Overvej følgende tilfælde.

Kode

 numbers = (34, 32, 56, 24, 75, 24) 

Som vi kan se, bruger vi parentes til at definere det. Indekser bruges til at få adgang til elementer. (Husk, at indeksering i Python begynder ved nul.)

Kode

 numbers[1] 

Produktion:

 32 

En tal[1] Python tuple er adskilt af det faktum, at vi ikke kan ændre dens elementer, dvs. elementer i tuple er uforanderlige.

Python NamedTuple-syntaks

Vi skal først importere en NamedTuple fra Pythons indbyggede modul kaldet samlinger, som vist:

 from collections import namedtuple 

Følgende er den grundlæggende syntaks til at konstruere en NamedTuple:

 namedtuple(Name,[Names of Values]) 

Navn det er parameteren for den titel, vi vil give vores NamedTuple, og

[Navne på værdier] er en pladsholder for listen, der indeholder navnene på de forskellige værdier eller attributter.

Eksempel på Python NamedTuple

Det første skridt, som tidligere sagt, er at importere NamedTuple.

 from collections import namedtuple 

Nu kan vi bruge syntaksen fra den foregående del til at bygge en NamedTuple:

 Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) 

I dette eksempel,

sammenligne metode java

Vi vælger at kalde NavnTuple-eleven og nævne navnene på værdierne 'Navn', 'Klasse', 'Alder', 'Emne' og 'Mærker' på en liste. Og vi har skabt vores første NamedTuple - Student.

Nu kan vi oprette et hus Student1 med de nødvendige specifikationer ved hjælp af Student som følger:

numpy meshgrid
 Studnet1 = Student('Itika', 11, 15, 'English', 79) 

Kun de specifikke værdier eller indhold, som etiketterne eller felterne i vores [Værdinavne] skal have, er påkrævet.

For at lave en indtastning af en ny elev, siger Student2, kopier dens værdier og indsæt dem i felterne i den nye variabel.

 Studnet2 = Student('Arshia', 12, 17, 'Maths', 93) 

Vi vil se, at vi kan bruge Student som en blueprint til at tage en registrering af nye studerende, som vi vil, uden at skulle kalde felternes etiketter frem hver gang.

Sådan får du værdierne af en navngivet Tuple ved hjælp af punktnotation

Vi kan bruge prikmetoden til at opnå værdierne af NamedTuple-forekomsterne Student1 og Student2. Følgende er syntaksen:

 . 

Følgende kodeeksempel viser dette:

Kode

 print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name) 

Produktion:

 15 11 'English' 79 'Itika' 

Ligeledes kan vi hente variablerne relateret til NamedTuple Student2 ved hjælp af Student2.Age, Student2.Class, og så videre.

Adgangsmetoderne for NamedTuple

Vi kan hente værdierne fra NamedTuple ved hjælp af indekser, nøgleord og getattr()-funktionen. NamedTuples feltværdier er strengt ordnet. Som følge heraf kan vi bruge indeksene til at finde dem.

Feltnavnene konverteres til attributter af NamedTuple. Som et resultat kan getattr() bruges til at hente data fra det felt.

Kode

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

Produktion:

 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 

Konverteringsprocedurer for NamedTuple

Forskellige samlinger kan konverteres til NamedTuple ved hjælp af nogle få teknikker. Vi kan også bruge funktionen _make() til at transformere en liste, tuple eller andre iterable objekter til en NamedTuple-instans.

Vi kan også konvertere et ordbogsdatatypeobjekt til en NamedTuple-samling. Operativen ** er påkrævet til denne transformation.

Som et OrderedDict-datatypeelement kan NamedTuple levere varer med dets nøgler. Vi kan kalde _asdict()-funktionen for at konvertere den til en OrderedDict.

Kode

 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) 

Produktion:

 Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'} 

Flere operationer på NamedTuple

Andre metoder, såsom _fields() og _replace, er tilgængelige. Vi kan bestemme hvilke felter en NamedTuple har ved at kalde funktionen _fields(). Funktionen _replace() bruges til at udskifte en værdi med en anden.

Kode

 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) 

Produktion:

 Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany') 

Hvordan fungerer Pythons NamedTuple?

Lad os se på, hvad ekstra vi kan opnå med en NamedTuple i Python.

1. En NamedTuple i Python er uforanderlig.

En NamedTuple i Python kan ikke ændres, ligesom dens almindelige version. Vi er ikke i stand til at ændre dens egenskaber.

Vi vil forsøge at ændre et af karakteristikaene for en tuple med navnet 'Student' for at demonstrere dette.

Kode

 from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11 

Produktion:

 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 

Som det kan ses, kaster det en AttributeError. Som et resultat kan vi udlede, at en NamedTuple er uforanderlig.

2. Oprettelse af en Python-ordbog fra en Python NamedTuple

I Python ligner en NamedTuple en ordbog, og vi kan omdanne den til en ved at:

skuespiller zeenat aman

Kode

 from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() ) 

Produktion:

 {'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93} 

Vi udnytter. asdict() metode til dette. Dette producerer også en Python OrderedDict.

3. Navnet Tuple med standardværdier

En navngivet tuple-klasse kan konfigureres med standardparametre på samme måde, som vi kan indstille startværdier for attributter i en almindelig klasse. Standardværdierne er tildelt attributterne længst til højre, da felter med en standardværdi skal vises efter hvert felt uden en standard.

Lad os omdefinere elevklassen med kun 1 standardindgang.

Kode

 from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 ) 

Produktion:

 Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100) 

Standardtallet 100 vil blive anvendt for mærkerne, som er feltet længst til højre i vores erklæring, hvis vi opretter NamedTuple med kun én værdi.

Vil standardværdien for alder blive anvendt, hvis vi udtrykkeligt angiver, at feltet skal være alder?

Kode

 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 ) 

Produktion:

 TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject' 

Svaret er nej. I en NamedTuple er rækkefølgen af ​​felterne meget stiv. Selvom vi udtrykkeligt erklærer noget, skal standardværdierne være de yderste til højre for at forhindre tvetydighed og potentielle vanskeligheder.

Fordele ved Python Namedtuple

Selvfølgelig vil ingen bruge NamedTuple, hvis de ikke ser nogen fordele. Så her er hvad vi har:

xvideoservicethief ubuntu 14.04 download

1. I modsætning til en standard tuple kan en NamedTuple i Python hente variabler efter deres titler.

Kode

 from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age ) 

Produktion:

 17 

2. Fordi det ikke inkluderer per-instans ordbøger, er Python NamedTuple effektiv i hukommelsen ligesom en konventionel tuple. Det er også hurtigere end en ordbog på grund af dette.

Konklusion

Vi lærte, hvordan NamedTuples giver os mulighed for at kombinere fordelene ved både tuples og ordbøger, hvordan man bygger NamedTuples, og hvordan man bruger dem i denne tutorial. Sådan henter du værdierne af NamedTuples ved hjælp af punktnotation i Python, hvordan de fungerer

Hvis læseren er bekendt med Pythons OOP, vil de se, at dette er identisk med hvordan Python-klasser fungerer. En klasse og dens attributter fungerer som en blueprint til at skabe mange flere objekter eller instanser, hver med sit eget sæt attributværdier.

For at øge klarheden af ​​vores kode er det dog typisk overdrevet at definere en klasse og give de væsentlige egenskaber, og det er meget hurtigere at konstruere NamedTuples i stedet for.