Рубрики
Без рубрики

Python NamedTuple.

Python NamedTuple, Python с названием Tupple, NamedTuple в Python, Python NamedTuple Значения по умолчанию, Dict To NameDTuple, NamedTuple Reflame, заменяйте код функций

Автор оригинала: Pankaj Kumar.

Объект Python NamedTuple является частью модуля коллекций. Python NameDTuple – это расширение кортежа.

Python NamedTuple.

  • Python NameDTuple неизменен, как кортеж.
  • NamedTuple позволяет нам предоставлять имена элементам. Таким образом, мы можем получить доступ к элементам как по значению индекса, либо по имени.
  • Python NameDTuple помогает нам в писать лучший читаемый код. Если кортеж имеет много значений, использование индекса становится запутанным. С NamedTuple мы можем предоставить описательные имена на полях.
  • Имена поля Python NamedTuple могут быть любым действительным идентификатором Python. Допустимые идентификаторы состоят из букв, цифр и подчеркиваний, но не начинаются с подчеркивания или цифры. Кроме того, мы не можем использовать ключевые слова, такие как Класс , для , Деф, возвращение, глобальный, пройти или поднять и т. Д.
  • Мы можем указать значения по умолчанию к параметрам NamedTuple, используя по умолчанию Параметр при определении namedTuple. Обратите внимание, что эта функция была добавлена в Python 3.7.
  • Экземпляры Python NamedTuple не имеют словарей для каждого экземпляра, поэтому они легки и требуют большего количества памяти, чем обычные кортежи.

Быстрая пересмотр к кортежу

Прежде чем начать с примеров NamedTuple, давайте быстро посмотрим на Python Tupple. Мы создадим несколько кортежей и распечатаваем их значения для консоли.

emp1 = ('Pankaj', 35, 'Editor')
emp2 = ('David', 40, 'Author')

for p in [emp1, emp2]:
    print(p)

for p in [emp1, emp2]:
    print(p[0], 'is a', p[1], 'years old working as', p[2])

# pythonic way
for p in [emp1, emp2]:
    print('%s is a %d years old working as %s' % p)

Выход:

('Pankaj', 35, 'Editor')
('David', 40, 'Author')
Pankaj is a 35 years old working as Editor
David is a 40 years old working as Author
Pankaj is a 35 years old working as Editor
David is a 40 years old working as Author

Обратите внимание, что мы используем индексы для извлечения элементов кортежа.

Пример Python NamedTuple

Python NamedTuple создан с использованием фабричного метода из модуля коллекций. Эта подпись функций выглядит следующим образом:

collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
  • TypEname : Это название объекта NamedTuple.
  • field_names : Это второй аргумент, чтобы определить имена поля в NameDTuple. Мы можем определить их, используя следующие форматы – «Имя возрастной роли» , «Имя, возраст, роль» или [«Имя», «возраст», «роль»] Отказ
  • Переименовать : Мы можем указать переименование true, так что неверные поля переименовываются в их указательные имена. Например, «Имя деф класс» будет переименован в «Имя», «_1», «_2» Отказ
  • по умолчанию : Он используется для определения значений по умолчанию к необязательным параметрам. Поскольку поля с значением по умолчанию должны поступать после любых полей без по умолчанию, значения по умолчанию применяются к главным параметрам. Например, если поля поля [«А», «B», «C»] и по умолчанию Есть (1, 2), то «A» будет необходимым аргументом, «B» будет по умолчанию 1, а «C» будет по умолчанию 2.
  • модуль : Если модуль определен, __module__ Атрибут названного кортежа устанавливается на это значение. Этот параметр был представлен в выпуске Python 3.6.

Давайте посмотрим простой пример для создания NamedTuple и распечатайте его значения.

from collections import namedtuple

Employee = namedtuple('Employee', ['name', 'age', 'role'])

# below are also valid ways to namedtuple
# Employee = namedtuple('Employee', 'name age role')
# Employee = namedtuple('Employee', 'name,age,role')

emp1 = Employee('Pankaj', 35, 'Editor')
emp2 = Employee(name='David', age=40, role='Author')

for p in [emp1, emp2]:
    print(p)

# accessing via index value
for p in [emp1, emp2]:
    print('%s is a %d years old working as %s' % p)

# accessing via name of the field
for p in [emp1, emp2]:
    print(p.name, 'is a', p.age, 'years old working as', p.role)

Обратите внимание, что я использую имена имени NamedTuple, чтобы получить значения. Более или менее он почти такой же, как и предыдущий пример кортежа.

Выход:

Employee(name='Pankaj', age=35, role='Editor')
Employee(name='David', age=40, role='Author')
Pankaj is a 35 years old working as Editor
David is a 40 years old working as Author
Pankaj is a 35 years old working as Editor
David is a 40 years old working as Author

Python NamedTuple с неверными ключами и переименовать

Если мы используем неверные ключи для имена имени имени, то мы получим ValueError Отказ

try:
    Person = namedtuple('Person', 'def class')
except ValueError as error:
    print(error)

Выход:

Type names and field names cannot be a keyword: 'def'

Теперь давайте посмотрим, что произойдет, когда мы укажем переименовать как True.

# rename=True will rename invalid names to index value with underscore prefix
Person = namedtuple('Person', 'name def class', rename=True)
print(Person._fields)

Выход:

('name', '_1', '_2')

Обратите внимание, что имена поля изменены на их значения индекса, префиксированные подчеркиванием.

Python NamedTuple модуль

# namedtuple module parameter - introduced in 3.6
Person = namedtuple('Person', 'name', module='MyPersonModule')
print(Person.__module__)

Выход:

MyPersonModule

Python NamedTuple Дополнительные методы

Давайте посмотрим на три дополнительных метода, доступными для NameDTuple.

_make (утеряемый)

Этот класс Method может быть использован для создания NamedTuple из намека.

t = ('Lisa', 35, 'Contributor')
emp3 = Employee._make(t)
print(emp3)

Выход:

Employee(name='Lisa', age=35, role='Contributor')

_asdict ()

Это используется для создания экземпляра упорядоченности от имени NamedTuple.

od = emp3._asdict()
print(od)

Выход:

OrderedDict([('name', 'Lisa'), ('age', 35), ('role', 'Contributor')])

_replace (** kwargs)

Python NamedTuple неизменен, поэтому мы не можем изменить его значения. Этот метод возвращает новый экземпляр NamedTuple, заменяя указанные поля новыми значениями.

emp3 = emp3._replace(name='Lisa Tamaki', age=40)
print(emp3)

Выход:

Employee(name='Lisa Tamaki', age=40, role='Contributor')

Python NamedTuple Дополнительные атрибуты

В NamedTuple есть два дополнительных параметра – _Fields и _fields_defaults Отказ Как следует из названия, они предоставляют информацию о полях и их значениях по умолчанию. Python 3.7 Droped _Source Атрибут Отказ

print(emp3._fields)
Gender = namedtuple('Gender', 'gender')
Person = namedtuple('Person', Employee._fields + Gender._fields)
print(Person._fields)

# _fields_defaults - introduced in Python 3.7
# Python 3.7 removed verbose parameter and _source attribute

Person1 = namedtuple('Person1', ['name', 'age'], defaults=['Pankaj', 20])
print(Person1._fields_defaults)

Выход:

('name', 'age', 'role')
('name', 'age', 'role', 'gender')
{'name': 'Pankaj', 'age': 20}

Python NamedTuple разные примеры

Давайте посмотрим на некоторые разные примеры NamedTuple.

getattr ()

Мы можем получить значение поля NamedTuple, используя функцию Getattr ().

emp3_name = getattr(emp3, 'name')
print(emp3_name)

Выход:

Lisa Tamaki

Диктовать на название кортежа

Названный кортеж и Dict очень похожи, поэтому неудивительно, что есть быстрый способ конвертировать Dict DictTuple.

d = {'age': 10, 'name': 'pankaj', 'role':'CEO'}
emp4 = Employee(**d)
print(d)
print(emp4)

Выход:

{'age': 10, 'name': 'pankaj', 'role': 'CEO'}
Employee(name='pankaj', age=10, role='CEO')

Резюме

Python NamedTuple полезен в написании лучшего кода с более читаемостью. Это очень легкий, как кортель, поэтому используйте его, когда найдут кортежи смущены из-за использования числовых индексов.

Ссылка: API док