logo

Pythonissa nimeltä Tuple

Pythonissa 'erityinen' monikko on nimeltään 'nimetty monikko'. Python-aloittelijat ovat usein hämmentyneitä siitä, varsinkin milloin ja miksi meidän on otettava se käyttöön.

Koska NamedTuple on monikko, se voi suorittaa kaikki toiminnot, joita monikko voi tehdä. Se on kuitenkin enemmän kuin yksinkertainen Python-tuple. Muissa tietokonekielissä, aivan kuten C++:ssa, se muistuttaa paljon enemmän 'luokkaa'. Se on monikko, jossa on määritellyt kentät ja määrätty pituus, joka on rakennettu ohjelmoidusti määritystemme mukaan. Tämä opetusohjelma selittää Python NamedTuples ja näyttää kuinka niitä käytetään ja milloin ja miksi meidän on käytettävä niitä.

Mikä on Python Tuple?

Uskomme, että meidän tulisi käydä Pythonin monikot uudelleen ennen jatkamista.

Pythonin monikko on säilö, joka voi tallentaa monia arvoja. Harkitse seuraavaa tapausta.

Koodi

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

Kuten näemme, käytämme sulkeita sen määrittelemiseen. Indeksejä käytetään elementtien käyttämiseen. (Muista, että indeksointi Pythonissa alkaa nollasta.)

Koodi

 numbers[1] 

Lähtö:

 32 

Numerot[1] Python-yleisön erottaa se tosiasia, että emme voi muokata sen elementtejä, eli monikon elementit ovat muuttumattomia.

Python NamedTuple Syntaksi

Meidän on ensin tuotava NamedTuple Pythonin sisäänrakennetusta moduulista nimeltä kokoelmat, kuten kuvassa:

 from collections import namedtuple 

Seuraava on perussyntaksi NamedTuplen rakentamiseen:

 namedtuple(Name,[Names of Values]) 

Nimi se on parametri otsikolle, jonka haluamme antaa NamedTuplelle, ja

[Arvojen nimet] on paikkamerkki luettelolle, joka sisältää eri arvojen tai attribuuttien nimet.

Python NamedTuple esimerkki

Ensimmäinen vaihe, kuten aiemmin sanottiin, on tuoda NamedTuple.

 from collections import namedtuple 

Nyt voimme käyttää edellisen osan syntaksia rakentaaksemme NamedTuplen:

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

Tässä esimerkissä

java lukee csv

Päätämme kutsua NamedTuple Opiskelijaa ja mainitsemme arvojen nimet 'Nimi', 'Luokka', 'Ikä', 'Aihe' ja 'Arvomerkit' luettelossa. Ja olemme luoneet ensimmäisen NamedTuplemme - Opiskelijamme.

Nyt voimme luoda Student1-talon vaadituilla määrityksillä käyttämällä Studentia seuraavasti:

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

Vain tietyt arvot tai sisältö, jotka [Arvojen nimet] -sivun tunnisteiden tai kenttien on otettava, vaaditaan.

Jos haluat syöttää uuden opiskelijan, esimerkiksi Opiskelija2, kopioi sen arvot ja liitä ne uuden muuttujan kenttiin.

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

Näemme, että voimme käyttää Studentia suunnitelmana uusien opiskelijoiden kirjaamiseen haluamallamme tavalla ilman, että meidän tarvitsee joka kerta huutaa esiin kenttien tarroja.

Kuinka saada NamedTuplen arvot pistemerkintöjen avulla

Voimme käyttää pistemenetelmää NamedTuple-esiintymien Student1 ja Student2 arvojen saamiseksi. Seuraava on syntaksi:

 . 

Seuraava koodiesimerkki osoittaa tämän:

Koodi

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

Lähtö:

 15 11 'English' 79 'Itika' 

Samoin voimme noutaa NamedTuple Student2:een liittyvät muuttujat käyttämällä Student2.Age-, Student2.Class- ja niin edelleen.

NamedTuplen käyttötavat

Voimme hakea arvot NamedTuplesta käyttämällä indeksejä, avainsanoja ja getattr()-funktiota. NamedTuplen kenttien arvot ovat tiukasti järjestyksessä. Tämän seurauksena voimme käyttää indeksejä niiden löytämiseen.

NamedTuple muuntaa kenttien nimet määritteiksi. Tämän seurauksena getattr()-funktiota voidaan käyttää tietojen hakemiseen kyseisestä kentästä.

Koodi

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

Lähtö:

 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 

NamedTuplen muunnosmenettelyt

Eri kokoelmat voidaan muuntaa NamedTupleksi muutamalla tekniikalla. Voimme myös käyttää _make()-funktiota listan, tuplen tai muiden iteroitavien objektien muuntamiseen NamedTuple-instanssiksi.

Voimme myös muuntaa sanakirjan tietotyyppiobjektin NamedTuple-kokoelmaksi. **-operaattori tarvitaan tähän muunnokseen.

OrderedDict-tietotyyppikohteena NamedTuple voi tuottaa kohteita avaimillaan. Voimme kutsua _asdict()-funktiota muuntaaksemme sen OrderedDictiksi.

Koodi

 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) 

Lähtö:

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

Lisää toimintoja NamedTuplessa

Muita menetelmiä, kuten _fields() ja _replace, ovat käytettävissä. Voimme määrittää, mitkä kentät NamedTuplessa on kutsumalla _fields()-funktiota. _replace()-funktiota käytetään arvon vaihtamiseen toiseen.

Koodi

 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) 

Lähtö:

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

Kuinka Pythonin NamedTuple toimii?

Katsotaanpa, mitä ylimääräistä voimme saavuttaa Pythonin NamedTuplella.

1. Pythonin NamedTuple on muuttumaton.

Pythonin NamedTuplea ei voi muokata, aivan kuten sen tavallista versiota. Emme voi muuttaa sen ominaisuuksia.

Yritämme muokata yhtä 'Student'-nimisen tuplen ominaisuuksista osoittaaksemme tämän.

Koodi

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

Lähtö:

 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 

Kuten voidaan nähdä, se heittää AttributeError-ilmoituksen. Tämän seurauksena voimme päätellä, että NamedTuple on muuttumaton.

2. Python-sanakirjan luominen Python NamedTuplesta

Pythonissa NamedTuple on samanlainen kuin sanakirja, ja voimme muuttaa sen sellaiseksi seuraavasti:

Koodi

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

Lähtö:

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

Hyödynnämme. asdict() -menetelmä tähän. Tämä tuottaa myös Python OrderedDictin.

3. NamedTuple oletusarvoilla

Nimetty tuple-luokka voidaan konfiguroida oletusparametreilla samalla tavalla kuin tavallisen luokan attribuuttien alkuarvot. Oletusarvot määritetään oikeanpuoleisimpiin määritteisiin, koska oletusarvoiset kentät tulee näkyä jokaisen kentän jälkeen, jossa ei ole oletusarvoa.

Määritetään opiskelijaluokka uudelleen vain yhdellä oletusmerkinnällä.

Koodi

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

Lähtö:

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

Merkeille käytetään oletusarvoa 100, joka on ilmoituksemme oikeanpuoleisin kenttä, jos luomme NamedTuplen vain yhdellä arvolla.

Käytetäänkö Ikä-oletusarvoa, jos määritämme kenttään nimenomaisesti Ikä?

java papu

Koodi

 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 ) 

Lähtö:

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

Vastaus on ei. NamedTuplessa kenttien järjestys on erittäin jäykkä. Vaikka nimenomaisesti ilmoitammekin jotain, oletusarvojen on oltava oikeimmat epäselvyyksien ja mahdollisten vaikeuksien välttämiseksi.

Python Namedtuplen edut

Kukaan ei tietenkään käytä NamedTuplea, jos he eivät näe mitään etuja. Joten tässä on mitä meillä on:

1. Toisin kuin tavallinen monikko, Pythonin NamedTuple voi hakea muuttujia niiden otsikoiden perusteella.

Koodi

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

Lähtö:

 17 

2. Koska Python NamedTuple ei sisällä esiintymäkohtaisia ​​sanakirjoja, se on tehokas muistissa aivan kuten tavallinen monikko. Tästä syystä se on myös nopeampi kuin sanakirja.

Johtopäätös

Opimme tässä opetusohjelmassa, kuinka NamedTuples antaa meille mahdollisuuden yhdistää sekä monikoiden että sanakirjojen edut, miten NamedTuples rakennetaan ja miten niitä käytetään. Kuinka noutaa NamedTuples-arvot Pythonin pistemerkinnällä, miten ne toimivat

Jos lukija tuntee Pythonin OOP:n, hän näkee tämän olevan identtinen Python-luokkien toiminnan kanssa. Luokka ja sen attribuutit toimivat mallina useiden objektien tai ilmentymien luomiseen, joista jokaisella on omat attribuuttiarvonsa.

Koodimme selkeyden lisäämiseksi luokan määrittäminen ja olennaisten ominaisuuksien tarjoaminen on kuitenkin tyypillisesti liiallista, ja on paljon nopeampaa rakentaa sen sijaan NamedTuples.