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.