Что такое «именованные кортежи» в Python? - PullRequest
798 голосов
/ 04 июня 2010

Читая изменения в Python 3.1 , я обнаружил кое-что ... неожиданное:

Кортеж sys.version_info теперь является именованным кортежем :

Я никогда раньше не слышал об именованных кортежах, и я думал, что элементы могут быть проиндексированы либо по номерам (как в кортежах и списках), либо по ключам (как в диктах). Я никогда не ожидал, что они могут быть проиндексированы в обоих направлениях.

Итак, мои вопросы:

  • Как называются кортежи?
  • Как их использовать?
  • Почему / когда я должен использовать именованные кортежи вместо обычных кортежей?
  • Почему / когда я должен использовать обычные кортежи вместо именованных кортежей?
  • Существует ли какой-либо "именованный список" (изменяемая версия именованного кортежа)?

Ответы [ 11 ]

0 голосов
/ 08 декабря 2017

Все остальные уже ответили, но я думаю, что мне еще есть что добавить.

Namedtuple может быть интуитивно понят как ярлык для определения класса.

См. Громоздкий и традиционный способ определения class.

class Duck:
    def __init__(self, color, weight):
        self.color = color
        self.weight = weight
red_duck = Duck('red', '10')

    In [50]: red_duck
    Out[50]: <__main__.Duck at 0x1068e4e10>
    In [51]: red_duck.color
    Out[51]: 'red'

Что касается namedtuple

from collections import namedtuple
Duck = namedtuple('Duck', ['color', 'weight'])
red_duck = Duck('red', '10')

In [54]: red_duck
Out[54]: Duck(color='red', weight='10')
In [55]: red_duck.color
Out[55]: 'red'
...