logo

Python valodā nosaukts Tuple

Programmā Python 'īpaša' kortedža veida nosaukums ir 'nosaukts kortežs'. Python iesācējus tas bieži mulsina, jo īpaši, kad un kāpēc mums tas ir jāievieš.

Tā kā NamedTuple ir kortežs, tas var veikt visas funkcijas, ko var veikt kortežs. Tomēr tas ir vairāk nekā vienkāršs Python kortežs. Citās datorvalodās, tāpat kā C++, tas ir daudz līdzīgāks 'klasei'. Tas ir kortedža apakštips ar noteiktiem laukiem un noteiktu garumu, kas programmatiski izveidots atbilstoši mūsu specifikācijām. Šī apmācība izskaidros Python NamedTuples un parādīs, kā tos izmantot un kad un kāpēc mums tie ir jāizmanto.

Kas ir Python Tuple?

Mēs uzskatām, ka pirms turpināšanas mums ir jāpārskata Python korteži.

Python kortežs ir konteiners, kurā var saglabāt daudzas vērtības. Apsveriet šādu gadījumu.

Kods

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

Kā redzam, mēs izmantojam iekavas, lai to definētu. Lai piekļūtu elementiem, tiek izmantoti indeksi. (Ņemiet vērā, ka Python indeksēšana sākas ar nulli.)

Kods

 numbers[1] 

Izvade:

 32 

Ciparu[1] Python kortežs ir atdalīts ar to, ka mēs nevaram modificēt tā elementus, t.i., kortedža elementi ir nemainīgi.

Python NamedTuple sintakse

Vispirms mums ir jāimportē NamedTuple no Python iebūvētā moduļa, ko sauc par kolekcijām, kā parādīts attēlā:

 from collections import namedtuple 

Šī ir pamata sintakse NamedTuple izveidei:

 namedtuple(Name,[Names of Values]) 

Vārds tas ir parametrs nosaukumam, kuru vēlamies piešķirt savam NamedTuple, un

[Vērtību nosaukumi] ir vietturis sarakstam, kurā ir dažādu vērtību vai atribūtu nosaukumi.

Python NamedTuple piemērs

Pirmais solis, kā minēts iepriekš, ir importēt NamedTuple.

 from collections import namedtuple 

Tagad mēs varam izmantot sintaksi no iepriekšējās daļas, lai izveidotu NamedTuple:

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

Šajā piemērā

java ir nākamais

Mēs izvēlamies izsaukt NamedTuple Studentu un sarakstā norādīt vērtību nosaukumus 'Vārds', 'Klase', 'Vecums', 'Priekšmets' un 'Atzīmes'. Un mēs esam izveidojuši savu pirmo NamedTuple — studentu.

Tagad mēs varam izveidot māju Student1 ar nepieciešamajām specifikācijām, izmantojot Studentu šādi:

propozicionālā loģika
 Studnet1 = Student('Itika', 11, 15, 'English', 79) 

Ir nepieciešamas tikai konkrētas vērtības vai saturs, kas ir jāieņem mūsu [Vērtību nosaukumi] iezīmēm vai laukiem.

Lai ievadītu jaunu studentu, teiksim Student2, kopējiet tā vērtības un ielīmējiet tās jaunā mainīgā laukos.

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

Mēs redzēsim, ka mēs varam izmantot Studentu kā projektu, lai izveidotu jaunu studentu ierakstu pēc vēlēšanās, katru reizi neizsaucot lauku etiķetes.

Kā iegūt NamedTuple vērtības, izmantojot punktu apzīmējumu

Mēs varam izmantot punktu metodi, lai iegūtu NamedTuple gadījumu Student1 un Student2 vērtības. Tālāk ir norādīta sintakse:

 . 

Šis koda paraugs to parāda:

Kods

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

Izvade:

 15 11 'English' 79 'Itika' 

Tāpat mēs varam izgūt mainīgos, kas saistīti ar NamedTuple Student2, izmantojot Student2.Age, Student2.Class un tā tālāk.

NamedTuple piekļuves metodes

Mēs varam izgūt vērtības no NamedTuple, izmantojot indeksus, atslēgvārdus un funkciju getattr(). NamedTuple lauku vērtības ir stingri sakārtotas. Rezultātā mēs varam izmantot indeksus, lai tos atrastu.

Lauku nosaukumi tiek pārveidoti par atribūtiem, izmantojot NamedTuple. Rezultātā getattr () var izmantot, lai izgūtu datus no šī lauka.

Kods

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

Izvade:

 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 

NamedTuple konvertēšanas procedūras

Dažādas kolekcijas var pārveidot par NamedTuple, izmantojot dažas metodes. Mēs varam arī izmantot funkciju _make(), lai pārveidotu sarakstu, virkni vai citus iterējamus objektus NamedTuple instancē.

Mēs varam arī pārvērst vārdnīcas datu tipa objektu NamedTuple kolekcijā. Šai transformācijai ir nepieciešams noteicējs **.

Kā OrderedDict datu tipa vienums NamedTuple var iegūt vienumus ar savām atslēgām. Mēs varam izsaukt funkciju _asdict(), lai pārvērstu to par OrderedDict.

Kods

 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) 

Izvade:

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

Vairāk darbību vietnē NamedTuple

Ir pieejamas arī citas metodes, piemēram, _fields() un _replace. Mēs varam noteikt, kuri lauki ir NamedTuple, izsaucot funkciju _fields(). Funkciju _replace() izmanto, lai nomainītu vienu vērtību pret citu.

Kods

 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) 

Izvade:

lauva salīdzinājumā ar tīģeri
 Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany') 

Kā darbojas Python NamedTuple?

Apskatīsim, kādas papildu darbības mēs varam paveikt ar NamedTuple Python.

1. NamedTuple Python ir nemainīgs.

NamedTuple Python nevar modificēt, tāpat kā tā parasto versiju. Mēs nevaram mainīt tā īpašības.

Lai to parādītu, mēģināsim modificēt vienu no nosaukuma “Students” kopas pazīmēm.

Kods

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

Izvade:

 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 

Kā redzams, tas rada AttributeError. Rezultātā mēs varam secināt, ka NamedTuple ir nemainīgs.

2. Python vārdnīcas izveide no Python NamedTuple

Programmā Python NamedTuple ir līdzīgs vārdnīcai, un mēs to varam pārveidot par vārdnīcu, izmantojot:

Kods

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

Izvade:

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

Mēs izmantojam. asdict() metode šim nolūkam. Tas arī rada Python OrderedDict.

3. NamedTuple ar noklusējuma vērtībām

Nosaukto korešu klasi var konfigurēt ar noklusējuma parametriem tādā pašā veidā, kā mēs varam iestatīt sākotnējās vērtības atribūtiem parastajā klasē. Noklusējumi tiek piešķirti galējiem labajā pusē esošajiem atribūtiem, jo ​​laukiem ar noklusējuma vērtību ir jāparādās aiz katra lauka bez noklusējuma.

No jauna definēsim Studentu klasi, izmantojot tikai 1 noklusējuma ierakstu.

Kods

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

Izvade:

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

Atzīmēm tiks piemērots noklusējuma skaitlis 100, kas ir mūsu deklarācijas galējais labais lauks, ja izveidosim NamedTuple tikai ar vienu vērtību.

Vai tiks lietota vecuma vecuma noklusējuma vērtība, ja laukam ir skaidri norādīts vecums?

Kods

 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 ) 

Izvade:

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

Atbilde ir nē. NamedTuple lauku secība ir ļoti stingra. Pat ja mēs kaut ko skaidri deklarējam, noklusējuma vērtībām ir jābūt vispareizākajām, lai novērstu neskaidrības un iespējamās grūtības.

Python Namedtuple priekšrocības

Protams, neviens neizmantos NamedTuple, ja neredzēs nekādas priekšrocības. Tātad, lūk, kas mums ir:

1. Atšķirībā no standarta virknes, NamedTuple Python var izgūt mainīgos pēc to nosaukumiem.

Kods

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

Izvade:

 17 

2. Tā kā tajā nav iekļautas katras instances vārdnīcas, Python NamedTuple ir efektīva atmiņā tāpat kā parastā virkne. Šī iemesla dēļ tas ir arī ātrāks par vārdnīcu.

Secinājums

Šajā apmācībā mēs uzzinājām, kā NamedTuples ļauj apvienot gan korešu, gan vārdnīcu priekšrocības, kā izveidot NamedTuples un kā tās izmantot. Kā izgūt NamedTuples vērtības, izmantojot Python punktu apzīmējumu, kā tās darbojas

Ja lasītājs ir iepazinies ar Python OOP, viņš redzēs, ka tas ir identisks tam, kā darbojas Python klases. Klase un tās atribūti darbojas kā projekts, lai izveidotu daudz vairāk objektu vai gadījumu, katram no kuriem ir sava atribūtu vērtību kopa.

Tomēr, lai palielinātu mūsu koda skaidrību, klases definēšana un būtisko raksturlielumu nodrošināšana parasti ir pārmērīga, un tā vietā ir daudz ātrāk izveidot NamedTuples.