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')  
  1. Változékonyság : Egy osztály példányai lehetnek változtathatók vagy megváltoztathatatlanok míg namedtuple példányok megváltoztathatatlanok.
  2. Mód : Az osztályok metódusokat (függvényeket) tartalmazhatnak, míg namedtuple elsősorban adattárolási lehetőséget biztosít elnevezett mezőkkel.
  3. Ö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 namedtuple nem támogatja az öröklést.

Mi a különbség a beírt dict és a namedtuple között?

  1. Típusellenőrzés : TypedDict (a typing modul) 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. namedtuple nem ad típus tippeket.
  2. Változékonyság : TypedDict példányok változtathatók, lehetővé téve az értékek megváltoztatását a while namedtuple példányok megváltoztathatatlanok.
  3. Szerkezet : TypedDict A szótárak szerkezetének meghatározására szolgál, minden kulcshoz adott típussal, míg namedtuple elnevezett mezőket biztosít a tuple-szerű adatokhoz.