I Python heter en 'speciell' sorts tuppel 'namngiven tupel'. Python-nybörjare blir ofta förbryllade över det, särskilt när och varför vi måste implementera det.
Eftersom en NamedTuple är en tuppel kan den utföra alla funktioner som en tuppel kan. Det är dock mer än en enkel Python-tuppel. I andra datorspråk, precis som med C++, är det mycket mer likt en 'klass'. Det är en undertyp av tuppel med specificerade fält och en definierad längd byggd programmatiskt enligt våra specifikationer. Denna handledning kommer att förklara Python NamedTuples och visa hur man använder dem och när och varför vi måste använda dem.
Vad är en Python Tuple?
Vi tror att vi bör återbesöka tupler i Python innan vi fortsätter.
En tupel i Python är en behållare som kan lagra många värden. Tänk på följande fall.
Koda
numbers = (34, 32, 56, 24, 75, 24)
Som vi kan se använder vi parentes för att definiera det. Index används för att komma åt element. (Tänk på att indexering i Python börjar på noll.)
Koda
numbers[1]
Produktion:
32
En siffror[1] Python-tuppel skiljs åt av det faktum att vi inte kan modifiera dess element, d.v.s. element i tupeln är oföränderliga.
Python NamedTuple-syntax
Vi måste först importera en NamedTuple från Pythons inbyggda modul som heter samlingar, som visas:
from collections import namedtuple
Följande är den grundläggande syntaxen för att konstruera en NamedTuple:
namedtuple(Name,[Names of Values])
namn det är parametern för titeln vi vill ge vår NamedTuple, och
[Namn på värden] är en platshållare för listan som innehåller namnen på de olika värdena eller attributen.
Python NamedTuple Exempel
Det första steget, som tidigare sagt, är att importera NamedTuple.
from collections import namedtuple
Nu kan vi använda syntaxen från föregående del för att bygga en NamedTuple:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
I det här exemplet,
ankita lokhande ålder
Vi väljer att anropa NamedTuple-studenten och nämna namnen på värdena, 'Namn', 'Klass', 'Ålder', 'Ämne' och 'Betyg' i en lista. Och vi har skapat vår första NamedTuple - Student.
Nu kan vi skapa ett hus Student1 med de nödvändiga specifikationerna med Student enligt följande:
java stack
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Endast de specifika värden eller innehåll som etiketterna eller fälten i vår [Värdenamn] måste ha krävs.
För att skriva in en ny elev, säg Student2, kopiera dess värden och klistra in dem i fälten för den nya variabeln.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Vi kommer att se att vi kan använda Student som en ritning för att ta ett register över nya studenter som vi vill utan att behöva ropa ut etiketterna för fälten varje gång.
Hur man får värdena för en NamedTuple med hjälp av punktnotation
Vi kan använda punktmetoden för att erhålla värdena för NamedTuple-instanserna Student1 och Student2. Följande är syntaxen:
.
Följande kodexempel visar detta:
Koda
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Produktion:
15 11 'English' 79 'Itika'
På samma sätt kan vi hämta variablerna relaterade till NamedTuple Student2 med Student2.Age, Student2.Class, och så vidare.
Åtkomstmetoderna för NamedTuple
Vi kan hämta värdena från NamedTuple med hjälp av index, nyckelord och getattr()-funktionen. NamedTuples fältvärden är strikt ordnade. Som ett resultat kan vi använda indexen för att hitta dem.
Fältnamnen konverteras till attribut av NamedTuple. Som ett resultat kan getattr() användas för att hämta data från det fältet.
Koda
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 för NamedTuple
Olika samlingar kan konverteras till NamedTuple med några få tekniker. Vi kan också använda funktionen _make() för att omvandla en lista, tupel eller andra itererbara objekt till en NamedTuple-instans.
Vi kan också konvertera ett objekt av ordboksdatatyp till en NamedTuple-samling. Operativ ** krävs för denna omvandling.
Som ett OrderedDict-datatypobjekt kan NamedTuple ge objekt med dess nycklar. Vi kan anropa funktionen _asdict() för att konvertera den till en OrderedDict.
Koda
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'}
Fler operationer på NamedTuple
Andra metoder, som _fields() och _replace, är tillgängliga. Vi kan avgöra vilka fält en NamedTuple har genom att anropa funktionen _fields(). Funktionen _replace() används för att byta ut ett värde mot ett annat.
Koda
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')
Hur fungerar Pythons NamedTuple?
Låt oss titta på vad extra vi kan åstadkomma med en NamedTuple i Python.
1. En NamedTuple i Python är oföränderlig.
En NamedTuple i Python kan inte modifieras, ungefär som dess vanliga version. Vi kan inte ändra dess egenskaper.
Vi kommer att försöka modifiera en av egenskaperna hos en tuppel med namnet 'Student' för att visa detta.
huvudmetod java
Koda
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 kan ses, kastar det en AttributeError. Som ett resultat kan vi dra slutsatsen att en NamedTuple är oföränderlig.
2. Skapa en Python-ordbok från en Python NamedTuple
I Python liknar en NamedTuple en ordbok, och vi kan omvandla den till en genom att:
Koda
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 använder oss av. asdict() metod för detta. Detta producerar också en Python OrderedDict.
3. NamedTuple med standardvärden
En namngiven tupelklass kan konfigureras med standardparametrar på samma sätt som vi kan ställa in initiala värden för attribut i en vanlig klass. Standardvärdena tilldelas attributen längst till höger eftersom fält med ett standardvärde ska visas efter varje fält utan standard.
Låt oss omdefiniera studentklassen med bara en standardpost.
multiline kommentar powershell
Koda
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)
Standardsiffran 100 kommer att tillämpas för märkena, vilket är fältet längst till höger i vår deklaration om vi skapar NamedTuple med bara ett värde.
Kommer standardvärdet för Age att tillämpas om vi uttryckligen anger att fältet ska vara Age?
Koda
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 är nej. I en NamedTuple är ordningen av fälten väldigt stel. Även om vi uttryckligen deklarerar något, måste standardvärdena vara längst till höger för att förhindra oklarhet och potentiella svårigheter.
Fördelar med Python Namedtuple
Naturligtvis kommer ingen att använda NamedTuple om de inte ser några fördelar. Så här är vad vi har:
1. Till skillnad från en vanlig tuppel kan en NamedTuple i Python hämta variabler efter sina titlar.
Koda
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. Eftersom det inte inkluderar ordböcker per instans, är Python NamedTuple effektiv i minnet precis som en konventionell tupel. Det är också snabbare än en ordbok på grund av detta.
Slutsats
Vi lärde oss hur NamedTuples tillåter oss att kombinera fördelarna med både tuples och ordböcker, hur man bygger NamedTuples och hur man använder dem i denna handledning. Hur man hämtar värdena för NamedTuples med hjälp av punktnotation i Python, hur de fungerar
Om läsaren är bekant med Pythons OOP kommer de att se att detta är identiskt med hur Python-klasser fungerar. En klass och dess attribut fungerar som en ritning för att skapa många fler objekt eller instanser, var och en med sin egen uppsättning attributvärden.
För att öka klarheten i vår kod är det dock vanligtvis överdrivet att definiera en klass och tillhandahålla de väsentliga egenskaperna, och det går mycket snabbare att konstruera NamedTuples istället.