Nis*_*ant 1 python namedtuple data-structures
为什么我们需要提及的名字Card为namedtuple像下面?
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)
不,这不会产生同样的效果.
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一个工厂函数返回一个元组的子类.