为什么python中的namedtuple需要一个名字?

Nis*_*ant 1 python namedtuple data-structures

为什么我们需要提及的名字Cardnamedtuple像下面?

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])
Run Code Online (Sandbox Code Playgroud)

我认为一个简单的Card = collections.namedtuple(['rank', 'suit'])实际上可以产生同样的效果吗?

例如,我可以在dict中获得相同的信息,例如:

card = dict({'rank': 'A', 'suit': 'spade'})
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 5

不,这不会产生同样的效果.

collections.namedtuple:返回一个名为typename的新元组子类 ...

namedtuple 返回元组类型的子类,而不是元组实例.

name参数指定新子类的类名,就像定义常规Python类并为其命名一样:

>>> from collections import namedtuple
>>> namedtuple('Card', ['rank', 'suit'], verbose=True)
class Card(tuple):
    'Card(rank, suit)'

    __slots__ = ()

    _fields = ('rank', 'suit')

    def __new__(_cls, rank, suit):
        'Create new instance of Card(rank, suit)'
        return _tuple.__new__(_cls, (rank, suit))
    ...
Run Code Online (Sandbox Code Playgroud)

快速类型检查清除了所有疑问:

>>> type(_), issubclass(_, tuple)
(<class 'type'>, True) 
Run Code Online (Sandbox Code Playgroud)

那么,你有namedtuple一个工厂函数返回一个元组的子类.

  • 一个更实际的问题是:使用“垃圾”名字有什么坏处吗?那“int”呢?或者甚至是空字符串`''`?例如,`Card = nametuple('int', ['rank', 'suit'], verbose=True)` (2认同)