logo

Pythonban Tuple néven

A Pythonban a „speciális” sor neve „elnevezett sor”. A Python kezdőket gyakran zavarja ez, különösen, hogy mikor és miért kell megvalósítanunk.

Mivel a NamedTuple egy sor, minden olyan funkciót el tud végezni, amit egy sor. Ez azonban több, mint egy egyszerű Python sor. Más számítógépes nyelveken, csakúgy, mint a C++ esetében, sokkal jobban hasonlít egy „osztályhoz”. Ez a sor egy altípusa meghatározott mezőkkel és meghatározott hosszúsággal, programozottan, a specifikációinknak megfelelően. Ez az oktatóanyag elmagyarázza a Python NamedTuples-t, és megmutatja, hogyan kell használni őket, és mikor és miért kell használnunk őket.

Mi az a Python Tuple?

Úgy gondoljuk, hogy a folytatás előtt újra meg kell látogatnunk a Python sorait.

A Pythonban egy sor olyan tároló, amely sok értéket tárolhat. Tekintsük a következő esetet.

Kód

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

Amint látjuk, zárójelet használunk ennek meghatározására. Az indexek az elemek elérésére szolgálnak. (Ne feledje, hogy a Pythonban az indexelés nullával kezdődik.)

Kód

 numbers[1] 

Kimenet:

 32 

A számok[1] Python sorát az a tény választja el egymástól, hogy az elemeit nem tudjuk módosítani, azaz a sor elemei megváltoztathatatlanok.

Python NamedTuple szintaxis

Először importálnunk kell egy NamedTuple-t a Python beépített gyűjtemények nevű moduljából, amint az ábra mutatja:

 from collections import namedtuple 

A következő az alapvető szintaxis a NamedTuple létrehozásához:

 namedtuple(Name,[Names of Values]) 

Név ez a paramétere annak a címnek, amelyet a NamedTuple-nknek szeretnénk adni, és

[Értékek nevei] a különböző értékek vagy attribútumok neveit tartalmazó lista helyőrzője.

Python NamedTuple példa

Az első lépés, mint korábban említettük, a NamedTuple importálása.

 from collections import namedtuple 

Most már használhatjuk az előző rész szintaxisát a NamedTuple felépítéséhez:

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

Ebben a példában

java int duplázni

Úgy döntünk, hogy meghívjuk a NamedTuple tanulót, és egy listában megemlítjük az értékek nevét, 'Név', 'Osztály', 'Életkor', 'Tárgy' és 'Jelsek'. És megalkottuk az első NamedTuple - Student-ünket.

Most létrehozhatunk egy Student1 házat a szükséges specifikációkkal a Student segítségével az alábbiak szerint:

tárolt programvezérlés
 Studnet1 = Student('Itika', 11, 15, 'English', 79) 

Csak azokra a konkrét értékekre vagy tartalomra van szükség, amelyeket a [Names of Values] címkéinek vagy mezőinek tartalmazniuk kell.

Ha új tanulót szeretne bevinni, mondjuk Student2, másolja át az értékeit, és illessze be az új változó mezőibe.

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

Látni fogjuk, hogy használhatjuk a Student-et tervrajzként, hogy tetszés szerint rögzítsük az új hallgatókat anélkül, hogy minden alkalommal ki kellene hívni a mezők címkéit.

Hogyan kaphatjuk meg a NamedTuple értékeit pontjelöléssel

A pont módszerrel megkaphatjuk a Student1 és Student2 NamedTuple példányok értékeit. A szintaxis a következő:

 . 

A következő kódminta ezt szemlélteti:

Kód

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

Kimenet:

 15 11 'English' 79 'Itika' 

Hasonlóképpen lekérhetjük a NamedTuple Student2 változókat a Student2.Age, Student2.Class és így tovább.

A NamedTuple hozzáférési módszerei

Az értékeket lekérhetjük a NamedTuple-ből indexek, kulcsszavak és a getattr() függvény használatával. A NamedTuple mezőértékei szigorúan rendezettek. Ennek eredményeként az indexek segítségével megkereshetjük őket.

A mezőneveket a NamedTuple attribútumokká alakítja. Ennek eredményeként a getattr() használható adatok lekérésére a mezőből.

Kód

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

Kimenet:

 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 

A NamedTuple konvertálási eljárásai

Különböző gyűjtemények konvertálhatók NamedTuple-re néhány technikával. A _make() függvényt arra is használhatjuk, hogy listát, sorokat vagy más iterálható objektumokat NamedTuple példányokká alakítsunk.

A szótár adattípusú objektumát NamedTuple gyűjteménygé is konvertálhatjuk. Ehhez az átalakításhoz a ** operátor szükséges.

OrderedDict adattípusként a NamedTuple kulcsaival elemeket tud előállítani. Meghívhatjuk az _asdict() függvényt, hogy OrderedDictté alakítsuk.

Kód

 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) 

Kimenet:

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

További műveletek a NamedTuple-n

Más módszerek is rendelkezésre állnak, mint például a _fields() és a _replace. A _fields() függvény meghívásával meghatározhatjuk, hogy egy NamedTuple mely mezőket tartalmazza. A _replace() függvény az egyik érték kicserélésére szolgál.

Kód

 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) 

Kimenet:

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

Hogyan működik a Python NamedTuple?

Nézzük meg, milyen extrákat érhetünk el a Python NamedTuple segítségével.

1. A Python nevű NamedTuple változatlan.

A Pythonban található NamedTuple nem módosítható, csakúgy, mint a szokásos verziója. Tulajdonságain nem tudunk változtatni.

Ennek demonstrálására megpróbáljuk módosítani a „Student” név sorának egyik jellemzőjét.

Kód

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

Kimenet:

 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 

Mint látható, AttributeError-t dob. Ennek eredményeként arra következtethetünk, hogy a NamedTuple változatlan.

2. Python szótár készítése Python NamedTuple fájlból

A Pythonban a NamedTuple hasonló a szótárhoz, és a következőképpen alakíthatjuk át azzá:

mutatók a c

Kód

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

Kimenet:

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

Használjuk a. asdict() metódus erre. Ezzel egy Python OrderedDict is keletkezik.

3. NamedTuple alapértelmezett értékekkel

Egy elnevezett tuple osztály ugyanúgy konfigurálható alapértelmezett paraméterekkel, mint ahogy egy normál osztály attribútumainak kezdeti értékeit állíthatjuk be. Az alapértelmezett értékek a jobb szélső attribútumokhoz vannak hozzárendelve, mivel az alapértelmezett értékkel rendelkező mezőknek minden alapértelmezés nélküli mező után meg kell jelenniük.

Határozzuk meg újra a Diák osztályt egyetlen alapértelmezett bejegyzéssel.

Kód

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

Kimenet:

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

A jelöléseknél az alapértelmezett 100-as szám kerül alkalmazásra, amely deklarációnkban a jobb szélső mező, ha a NamedTuple-t csak egy értékkel hozzuk létre.

Az Életkor alapértelmezett értéke kerül alkalmazásra, ha kifejezetten az Életkor mezőt adjuk meg?

Kód

 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 ) 

Kimenet:

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

A válasz nem. A NamedTuple-ban a mezők sorrendje nagyon merev. Még ha kifejezetten deklarálunk is valamit, az alapértelmezett értékeknek a legjobbnak kell lenniük, hogy elkerüljük a félreértéseket és az esetleges nehézségeket.

A Python Namedtuple előnyei

Természetesen senki sem fogja használni a NamedTuple-t, ha nem lát semmilyen előnyt. Tehát itt van, amit kaptunk:

img css igazítás

1. A szabványos tuple-től eltérően a Python NamedTuple-je a változókat címük alapján tudja lekérni.

Kód

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

Kimenet:

 17 

2. Mivel nem tartalmaz példányonkénti szótárakat, a Python NamedTuple ugyanúgy hatékony a memóriában, mint a hagyományos sor. Emiatt gyorsabb is, mint egy szótár.

Következtetés

Ebben az oktatóanyagban megtudtuk, hogy a NamedTuples hogyan teszi lehetővé számunkra a sorok és a szótárak előnyeinek kombinálását, hogyan építsünk NamedTuples-t és hogyan használjuk őket. Hogyan lehet lekérni a NamedTuples értékeit a Pythonban a pontjelöléssel, hogyan működnek

Ha az olvasó ismeri a Python OOP-ját, látni fogja, hogy ez megegyezik a Python osztályok működésével. Egy osztály és attribútumai tervezetként szolgálnak további objektumok vagy példányok létrehozásához, amelyek mindegyike saját attribútumértékekkel rendelkezik.

A kódunk egyértelműségének növelése érdekében azonban egy osztály meghatározása és az alapvető jellemzők megadása általában túlzás, és sokkal gyorsabb a NamedTuples létrehozása.