Python поддържа тип контейнерен речник, наречен ' namedtuple() " присъства в модула " колекции '. В тази статия ще видим как да създадете NameTuple и операции с NamedTuple.
полиморфизъм в java
Какво е NamedTuple в Python?
в Python NamedTuple присъства вътре в модул колекции . Той предоставя начин за създаване на прости леки структури от данни, подобни на клас, но без допълнителни разходи за дефиниране на пълен клас. Подобно на речниците, те съдържат ключове, които са хеширани до определена стойност. Напротив, той поддържа както достъп от ключ-стойност, така и итерация на функционалността, която речници липса.
Python NamedTuple Синтаксис
namedtuple(typename field_names)
- typename - Името на namedtuple.
- field_names - Списъкът с атрибути, съхранени в namedtuple.
Пример: Реализацията на код на NamedTuple е показана в Python .
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) 
Изход
The Student age using index is : 19 The Student name using keyname is : Nandini
Операции върху NamedTuple
По-долу са следните операции, които могат да се извършват с помощта на namedtuple():
който е измислил училището
- Създайте NameTuple
- Операции за достъп
- Операции за преобразуване
- Допълнителни операции
Създайте NameTuple в Python
Това създава нов клас namedtuple, използвайки функцията namedtuple() от колекции модул. Първият аргумент е името на новия клас, а вторият аргумент е списък с имена на полета.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Изход
1 2
Операции за достъп
Namedtuples в Python предоставят удобни начини за достъп до техните полета. По-долу са някои операции за достъп, предоставени в Python за NamedTuple:
- Достъп по индекс
- Достъп чрез име на ключ
- Достъп чрез getattr()
Достъп по индекс
Стойностите на атрибутите на namedtuple() са подредени и могат да бъдат достъпни чрез индексния номер за разлика от речниците, които не са достъпни чрез индекс. В този пример имаме достъп до студентския чрез използване на индекс.
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]) 
Изход
The Student age using index is : 19
Достъп чрез име на ключ
Достъпът чрез име на ключ също е разрешен, както в речниците. В този пример използваме keyname за достъп до името на ученика.
линукс архитектура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) 
Изход
The Student name using keyname is : Nandini
Достъп чрез getattr()
Това е още един начин за достъп до стойността, като зададете namedtuple и ключова стойност като неин аргумент. В този пример използваме getattr() за достъп до идентификатора на ученика в дадения namedtuple.
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')) 
Изход
The Student DOB using getattr() is : 2541997
Операции за преобразуване
Namedtuples предоставят няколко полезни операции за преобразуване за работа с други типове данни Python . По-долу са следните операции за преобразуване, които се предоставят за namedtuples в Python:
- Използване на _make()
- Използване на _asdict()
- Използване на оператор ** (двойна звезда).
Преобразуване чрез _make()
Тази функция се използва за връщане на a namedtuple() от итерируемия премина като аргумент. В този пример използваме _make(), за да преобразуваме списъка 'li' в namedtuple.
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)) 
Изход
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Операция за преобразуване с помощта на _asdict()
Тази функция се връща на OrderedDict() както е конструирано от картографираните стойности на namedtuple(). В този пример използваме _asdict() за преобразуване на входния списък в инстанция namedtuple.
обратен низ javaPython
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()) 
Изход
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Използване на оператор "**" (двойна звезда).
Тази функция се използва за преобразуване на речник в namedtuple(). В този пример използваме '**', за да преобразуваме входния списък в namedtuple.
Pythonimport 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)) 
Изход
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Допълнителни операции
Има някои допълнителни операции, които са предвидени в Python за NamedTuples:
- _полета
- _replace()
- __ново__()
- __getnewargs__()
_полета
Този атрибут на данни се използва за получаване всички ключови имена от декларираното пространство от имена. В този пример използваме _fields, за да получим всички декларирани ключови имена на пространството от имена.
Pythonimport 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) 
Изход
All the fields of students are : ('name' 'age' 'DOB') _replace()
_replace() е като str.replace(), но се насочва към именувани полета (не променя оригиналните стойности). В този пример използваме _replace(), за да заменим име от „Nandini“ на „Manjeet“.
Pythonimport 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')) 
Изход
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__ново__()
Тази функция връща нов екземпляр на класа Student, като взема стойностите, които искаме да присвоим на ключовете в посочения кортеж. В този пример използваме __new__(), за да върнем нов екземпляр на класа Student.
Pythonimport 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')) 
Изход
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Тази функция връща посочения кортеж като обикновен кортеж. В този пример правим същото, като използваме __getnewargs__().
Pythonimport 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__()) 
Изход
('Himesh' '19' '26082003') 
- Изменчивост : Екземплярите на клас могат да бъдат променливи или неизменни докато
namedtupleекземплярите са неизменни.- Методи : Класовете могат да съдържат методи (функции), докато
namedtupleосновно предоставя начин за съхраняване на данни с именувани полета.- Наследство : Класовете поддържат наследяване, което позволява създаването на сложни йерархии, докато
namedtupleне поддържа наследяване.
Каква е разликата между typed dict и namedtuple?
- Проверка на типа :
TypedDict(отtypingмодул) предоставя подсказки за тип за речници със специфични двойки ключ-стойност, полезни за проверка на тип.namedtupleне предоставя съвети за тип.- Изменчивост :
TypedDictекземплярите са променливи, позволявайки промени в стойностите whilenamedtupleекземплярите са неизменни.- Структура :
TypedDictсе използва за дефиниране на структурата на речници със специфични типове за всеки ключ, докатоnamedtupleпредоставя наименувани полета за подобни на кортежи данни.
