from collections import namedtuple
Point = namedtuple('whatsmypurpose',['x','y'])
p = Point(11,22)
print(p)
输出:
whatsmypurpose(x=11,y=22)
'whatsmypurpose'的相关性/用途是什么?
from collections import namedtuple
Point = namedtuple('whatsmypurpose',['x','y'])
p = Point(11,22)
print(p)
输出:
whatsmypurpose(x=11,y=22)
'whatsmypurpose'的相关性/用途是什么?
namedtuple()
是一个用于创建 tuple
子类的工厂函数。这里,'whatsmypurpose'
是类型名称。当您创建一个命名元组时,就会在内部创建一个具有此名称(whatsmypurpose
)的类。
您可以通过使用 verbose 参数来注意到这一点,例如:
Point=namedtuple('whatsmypurpose',['x','y'], verbose=True)
你也可以尝试使用 type(p)
来验证这一点。
_source
,以便在需要打印或执行定义时使用。 - Eryk SunPoint.__name__
)用于显示目的(尝试print(Point(1, 2))
)。 - zvynregister_namedtuple('name', ..., locals())
的东西,它会自动将name
添加到locals()
中。 - jamesdlin'whatsmypurpose'
确定了新的子类类型名称。来自文档:
collections.namedtuple(typename, field_names, verbose=False,rename=False)
返回一个名为 typename 的新元组子类。
以下是示例:
>>> from collections import namedtuple
>>> Foo = namedtuple('Foo', ['a', 'b'])
>>> type(Foo)
<class 'type'>
>>> a = Foo(a = 1, b = 2)
>>> a
Foo(a=1, b=2)
>>> Foo = namedtuple('whatsmypurpose', ['a', 'b'])
>>> a = Foo(a = 1, b = 2)
>>> a
whatsmypurpose(a=1, b=2)
>>>
verbose
参数设置为True,您可以查看完整的whatsmypurpose
类定义。
>>> Foo = namedtuple('whatsmypurpose', ['a', 'b'], verbose=True)
from builtins import property as _property, tuple as _tuple
from operator import itemgetter as _itemgetter
from collections import OrderedDict
class whatsmypurpose(tuple):
'whatsmypurpose(a, b)'
__slots__ = ()
_fields = ('a', 'b')
def __new__(_cls, a, b):
'Create new instance of whatsmypurpose(a, b)'
return _tuple.__new__(_cls, (a, b))
@classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
'Make a new whatsmypurpose object from a sequence or iterable'
result = new(cls, iterable)
if len(result) != 2:
raise TypeError('Expected 2 arguments, got %d' % len(result))
return result
def _replace(_self, **kwds):
'Return a new whatsmypurpose object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('a', 'b'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % list(kwds))
return result
def __repr__(self):
'Return a nicely formatted representation string'
return self.__class__.__name__ + '(a=%r, b=%r)' % self
def _asdict(self):
'Return a new OrderedDict which maps field names to their values.'
return OrderedDict(zip(self._fields, self))
def __getnewargs__(self):
'Return self as a plain tuple. Used by copy and pickle.'
return tuple(self)
a = _property(_itemgetter(0), doc='Alias for field number 0')
b = _property(_itemgetter(1), doc='Alias for field number 1')
class MyClass(tuple):
pass
MyClass.__name__ == "MyClass"
。 namedtuple
是一个类型工厂,它也创建元组的子类,但在这个函数式API中,你必须显式地传递名称。
当你将返回的类型分配给不同的名称时:Point = namedtuple('whatsmypurpose',['x','y'])
class whatsmypurpose(tuple):
... # extra stuff here to setup slots, field names, etc
Point = whatsmypurpose
del whatsmypurpose
typing.NamedTuple
中的声明式API,而不是collections
中的函数式API。 然后您可能需要注释类型。