I Python heter en 'spesiell' slags tuppel 'navngitt tuppel'. Python-begynnere blir ofte forvirret over det, spesielt når og hvorfor vi må implementere det.
Fordi en NamedTuple er en tuppel, kan den utføre alle funksjonene som en tuppel kan. Det er imidlertid mer enn en enkel Python-tuppel. På andre dataspråk, akkurat som med C++, ligner det mye mer på en 'klasse'. Det er en undertype av tuppel med spesifiserte felt og en definert lengde bygget programmatisk til våre spesifikasjoner. Denne opplæringen vil forklare Python NamedTuples og vise hvordan du bruker dem og når og hvorfor vi må bruke dem.
Hva er en Python Tuple?
Vi mener vi bør se tuples i Python på nytt før vi fortsetter.
En tuppel i Python er en beholder som kan lagre mange verdier. Tenk på følgende tilfelle.
Kode
numbers = (34, 32, 56, 24, 75, 24)
Som vi kan se, bruker vi parenteser for å definere det. Indekser brukes for å få tilgang til elementer. (Husk at indeksering i Python begynner på null.)
Kode
numbers[1]
Produksjon:
32
En tall[1] Python-tuppel er atskilt ved at vi ikke kan modifisere dens elementer, det vil si at elementer i tuppelen er uforanderlige.
Python NamedTuple-syntaks
Vi må først importere en NamedTuple fra Pythons innebygde modul kalt samlinger, som vist:
from collections import namedtuple
Følgende er den grunnleggende syntaksen for å konstruere en NamedTuple:
namedtuple(Name,[Names of Values])
Navn det er parameteren for tittelen vi ønsker å gi vår NamedTuple, og
[Navn på verdier] er en plassholder for listen som inneholder navnene på de forskjellige verdiene eller attributtene.
Eksempel på Python NamedTuple
Det første trinnet, som tidligere sagt, er å importere NamedTuple.
from collections import namedtuple
Nå kan vi bruke syntaksen fra den foregående delen til å bygge en NamedTuple:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
I dette eksemplet,
... i java
Vi velger å kalle NamedTuple-studenten og nevne navnene på verdiene, 'Navn', 'Klasse', 'Alder', 'Emne' og 'Merker' i en liste. Og vi har laget vår første NamedTuple - Student.
Nå kan vi lage et hus Student1 med de nødvendige spesifikasjonene ved å bruke Student som følger:
svever i css
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Bare de spesifikke verdiene eller innholdet som etikettene eller feltene i [navn på verdier] må ha, er obligatoriske.
For å skrive inn en ny student, si Student2, kopier verdiene og lim dem inn i feltene til den nye variabelen.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Vi vil se at vi kan bruke Student som en blåkopi for å ta en oversikt over nye studenter som vi vil uten å måtte ringe opp etikettene til feltene hver gang.
Hvordan få verdiene til en navngitt Tuple ved å bruke punktnotasjon
Vi kan bruke prikkmetoden til å hente verdiene til NamedTuple-forekomstene Student1 og Student2. Følgende er syntaksen:
.
Følgende kodeeksempel demonstrerer dette:
Kode
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Produksjon:
15 11 'English' 79 'Itika'
På samme måte kan vi hente variablene knyttet til NamedTuple Student2 ved å bruke Student2.Age, Student2.Class, og så videre.
Tilgangsmetodene til NamedTuple
Vi kan hente verdiene fra NamedTuple ved å bruke indekser, nøkkelord og getattr()-funksjonen. NamedTuples feltverdier er strengt ordnet. Som et resultat kan vi bruke indeksene for å finne dem.
Feltnavnene konverteres til attributter av NamedTuple. Som et resultat kan getattr() brukes til å hente data fra det feltet.
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'))
Produksjon:
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
Konverteringsprosedyrer for NamedTuple
Ulike samlinger kan konverteres til NamedTuple ved hjelp av noen få teknikker. Vi kan også bruke funksjonen _make() til å transformere en liste, tuppel eller andre gjentakbare objekter til en NamedTuple-forekomst.
Vi kan også konvertere et ordbokdatatypeobjekt til en NamedTuple-samling. Operativen ** kreves for denne transformasjonen.
Som et OrderedDict-datatypeelement kan NamedTuple gi varer med nøklene. Vi kan kalle funksjonen _asdict() for å 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)
Produksjon:
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
Flere operasjoner på NamedTuple
Andre metoder, som _fields() og _replace, er tilgjengelige. Vi kan bestemme hvilke felt en NamedTuple har ved å kalle funksjonen _fields(). Funksjonen _replace() brukes til å bytte ut en verdi med en annen.
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)
Produksjon:
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?
La oss se på hva ekstra vi kan oppnå med en NamedTuple i Python.
1. En NamedTuple i Python er uforanderlig.
En NamedTuple i Python kan ikke endres, omtrent som dens vanlige versjon. Vi er ikke i stand til å endre dens egenskaper.
Vi vil forsøke å modifisere en av egenskapene til en tuppel med navnet 'Student' for å 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
Produksjon:
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 du kan se, kaster den en AttributeError. Som et resultat kan vi slutte at en NamedTuple er uforanderlig.
2. Opprette en Python-ordbok fra en Python NamedTuple
I Python ligner en NamedTuple på en ordbok, og vi kan transformere den til en ved å:
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() )
Produksjon:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
Vi bruker. asdict() metode for dette. Dette produserer også en Python OrderedDict.
3. NamedTuple med standardverdier
En navngitt tuppelklasse kan konfigureres med standardparametere på samme måte som vi kan sette startverdier for attributter i en vanlig klasse. Standardverdiene er tilordnet attributtene lengst til høyre siden felt som har en standardverdi skal vises etter hvert felt uten standard.
La oss omdefinere studentklassen med bare 1 standardoppføring.
Kode
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Produksjon:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
Standardtallet 100 vil bli brukt for merkene, som er feltet lengst til høyre i erklæringen vår hvis vi oppretter NamedTuple med bare én verdi.
Vil standardverdien for alder brukes hvis vi uttrykkelig spesifiserer 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 )
Produksjon:
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
Svaret er nei. I en NamedTuple er rekkefølgen av feltene veldig rigid. Selv om vi uttrykkelig erklærer noe, må standardverdiene være lengst til høyre for å forhindre tvetydighet og potensielle vanskeligheter.
Fordeler med Python Namedtuple
Selvfølgelig vil ingen bruke NamedTuple hvis de ikke ser noen fordeler. Så her er hva vi har:
konvertere streng til dato
1. I motsetning til en standard tuppel, kan en NamedTuple i Python hente variabler etter titlene.
Kode
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Produksjon:
17
2. Fordi den ikke inkluderer ordbøker per instans, er Python NamedTuple effektiv i minnet akkurat som en konvensjonell tuppel. Det er også raskere enn en ordbok på grunn av dette.
Konklusjon
Vi lærte hvordan NamedTuples lar oss kombinere fordelene med både tuples og ordbøker, hvordan man bygger NamedTuples, og hvordan man bruker dem i denne opplæringen. Hvordan hente verdiene til NamedTuples ved hjelp av punktnotasjon i Python, hvordan de fungerer
Hvis leseren er kjent med Pythons OOP, vil de se at dette er identisk med hvordan Python-klasser fungerer. En klasse og dens attributter fungerer som en blåkopi for å lage mange flere objekter eller forekomster, hver med sitt eget sett med attributtverdier.
For å øke klarheten i koden vår er det imidlertid vanligvis overdrevent å definere en klasse og gi de essensielle egenskapene, og det er mye raskere å konstruere NamedTuples i stedet.