Namedtuple Pythonban
A Python egyfajta konténerszótárt támogat namedtuple() ' jelen van a modulban ' gyűjtemények '. Ebben a cikkben látni fogjuk, hogyan hozhat létre NameTuple-t, és hogyan végezhet műveleteket a NamedTuple-n.
Mi a NamedTuple a Pythonban?
In Piton A NamedTuple jelen van a gyűjtemények modul . Módot biztosít egy osztályhoz hasonló, egyszerű, könnyű adatszerkezetek létrehozására, anélkül, hogy a teljes osztály meghatározásának többletköltségei kellenek. A szótárokhoz hasonlóan egy adott értékre kivonatolt kulcsokat tartalmaznak. Éppen ellenkezőleg, támogatja a kulcsértékből való hozzáférést és a funkció iterációját szótárak hiánya.
Python NamedTuple szintaxis
namedtuple(típusnév mező_nevek)
- typename - A namedtuple neve.
- mező_nevek – A namedtuple-ben tárolt attribútumok listája.
Példa: A NamedTuple kód implementációja itt látható Piton .
Python # Python code to demonstrate namedtuple() from collections import namedtuple # Declaring namedtuple() Student = namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ]) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
Kimenet
The Student age using index is : 19 The Student name using keyname is : Nandini
A NamedTuple műveletei
Az alábbiakban a namedtuple() segítségével végrehajtható műveletek találhatók:
- Hozzon létre egy NameTuple-t
- Hozzáférési műveletek
- Konverziós műveletek
- További műveletek
Hozzon létre egy NameTuple-t a Pythonban
Ez létrehoz egy új namedtuple osztályt a namedtuple() függvény segítségével gyűjtemények modult. Az első argumentum az új osztály neve, a második argumentum a mezőnevek listája.
Python from collections import namedtuple Point = namedtuple ( 'Point' [ 'x' 'y' ]) p = Point ( x = 1 y = 2 ) print ( p . x p . y )
Kimenet
1 2
Hozzáférési műveletek
A Python névsorai kényelmes módokat biztosítanak a mezőik elérésére. Az alábbiakban bemutatunk néhány hozzáférési műveletet a Pythonban a NamedTuple számára:
- Hozzáférés index alapján
- Hozzáférés kulcsnévvel
- Hozzáférés a getattr() használatával
Hozzáférés Index alapján
A namedtuple() attribútumértékei sorrendben vannak, és az indexszám segítségével érhetők el, ellentétben a szótárakkal, amelyek nem érhetők el indexen keresztül. Ebben a példában az index használatával érjük el a tanulóét.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ])
Kimenet
The Student age using index is : 19
Hozzáférés kulcsnévvel
A kulcsnévvel való hozzáférés is megengedett, mint a szótárak esetében. Ebben a példában a kulcsnevet használjuk a tanuló nevének eléréséhez.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
Kimenet
The Student name using keyname is : Nandini
Hozzáférés a getattr() használatával
Ez egy újabb módja az érték elérésének a namedtuple és a key érték megadásával argumentumként. Ebben a példában a getattr()-ot használjuk a tanuló azonosítójának eléréséhez az adott namedtuple-ban.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using getattr() print ( 'The Student DOB using getattr() is : ' end = '' ) print ( getattr ( S 'DOB' ))
Kimenet
The Student DOB using getattr() is : 2541997
Konverziós műveletek
A namedtuples néhány hasznos konverziós műveletet kínál más adattípusokkal való együttműködéshez Piton . Az alábbiakban az alábbi konverziós műveletek találhatók, amelyek a Python névsoraihoz biztosítottak:
- _make() használata
- _asdict() használata
- ** (kettős csillag) operátor használata
Konverzió a _make() használatával
Ez a függvény az a namedtuple() az iterálhatóból érvként ment át. Ebben a példában a _make() függvényt használjuk a 'li' lista namedtuple-vé való átalakítására.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _make() to return namedtuple() print ( 'The namedtuple instance using iterable is : ' ) print ( Student . _make ( li ))
Kimenet
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Konverziós művelet az _asdict() használatával
Ez a függvény visszatér a OrderedDict() a namedtuple() leképezett értékeiből összeállított módon. Ebben a példában az _asdict() függvényt használjuk a bemeneti lista névre szóló példányává alakításához.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _asdict() to return an OrderedDict() print ( 'The OrderedDict instance using namedtuple is : ' ) print ( S . _asdict ())
Kimenet
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) '**' (kettős csillag) operátor használata
Ez a függvény a szótár konvertálására szolgál namedtuple()-vé. Ebben a példában a '**' karaktert használjuk a bemeneti lista namedtuple-vé alakításához.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using ** operator to return namedtuple from dictionary print ( 'The namedtuple instance from dict is : ' ) print ( Student ( ** di ))
Kimenet
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
További műveletek
Van néhány további művelet is Piton NamedTuples esetén:
- _fields
- _replace()
- __új__()
- __getnewargs__()
_fields
Ezt az adatattribútumot a get az összes kulcsnév a deklarált névtérből. Ebben a példában a _fields-et használjuk a névtér összes kulcsnevének deklarálásához.
Python import collections Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # using _fields to display all the keynames of namedtuple() print ( 'All the fields of students are : ' ) print ( S . _fields )
Kimenet
All the fields of students are : ('name' 'age' 'DOB') _replace()
A _replace() olyan, mint az str.replace(), de a mezőket célozza meg (nem módosítja az eredeti értékeket). Ebben a példában a _replace() függvényt használjuk a 'Nandini' név helyett a 'Manjeet' névre.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # ._replace returns a new namedtuple # it does not modify the original print ( 'returns a new namedtuple : ' ) print ( S . _replace ( name = 'Manjeet' ))
Kimenet
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__új__()
Ez a függvény a Student osztály új példányát adja vissza azáltal, hogy felveszi azokat az értékeket, amelyeket a megnevezett sor kulcsaihoz akarunk rendelni. Ebben a példában a __new__() függvényt használjuk a Student osztály új példányának visszaadására.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Student.__new__ returns a new instance of Student(nameageDOB) print ( Student . __new__ ( Student 'Himesh' '19' '26082003' ))
Kimenet
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Ez a függvény a megnevezett tuple-t sima sorként adja vissza. Ebben a példában ugyanezt tesszük a __getnewargs__() használatával.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) H = Student ( 'Himesh' '19' '26082003' ) # .__getnewargs__ returns the named tuple as a plain tuple print ( H . __getnewargs__ ())
Kimenet
('Himesh' '19' '26082003')
- Változékonyság : Egy osztály példányai lehetnek változtathatók vagy megváltoztathatatlanok míg
namedtuplepéldányok megváltoztathatatlanok.- Mód : Az osztályok metódusokat (függvényeket) tartalmazhatnak, míg
namedtupleelsősorban adattárolási lehetőséget biztosít elnevezett mezőkkel.- Öröklés : Az osztályok támogatják az öröklődést, lehetővé téve összetett hierarchiák létrehozását, míg
namedtuplenem támogatja az öröklést.
Mi a különbség a beírt dict és a namedtuple között?
- Típusellenőrzés :
TypedDict(atypingmodul) típusú tippeket ad a szótárak számára, amelyek speciális kulcs-érték párokat tartalmaznak, amelyek hasznosak a típusellenőrzéshez.namedtuplenem ad típus tippeket.- Változékonyság :
TypedDictpéldányok változtathatók, lehetővé téve az értékek megváltoztatását a whilenamedtuplepéldányok megváltoztathatatlanok.- Szerkezet :
TypedDictA szótárak szerkezetének meghatározására szolgál, minden kulcshoz adott típussal, mígnamedtupleelnevezett mezőket biztosít a tuple-szerű adatokhoz.