namedtuple return和它的typename参数有什么区别?

Mar*_*eck 8 python

Python文档说:

collections.namedtuple(typename, field_names[, verbose=False][, rename=False])
Returns a new tuple subclass named typename. 
Run Code Online (Sandbox Code Playgroud)

它举了一个例子

>>>Point = namedtuple('Point',...

在我能找到的所有例子中,返回namedtuple和参数typename的拼写是相同的.

试验,似乎论证无关紧要:

>>>Class = collections.namedtuple('Junk', 'field')
>>>obj = Class(field=1)
>>>print obj.field
1
Run Code Online (Sandbox Code Playgroud)

有什么区别?typename论证如何重要?

And*_*ini 9

执行以下代码时:

Bar = collections.namedtuple('Foo', 'field')
Run Code Online (Sandbox Code Playgroud)

你是:

  1. 创建一个名为的新类型Foo;
  2. 将该类型分配给名为的变量Bar.

该代码相当于:

class Foo:
    ...

Bar = Foo
del Foo
Run Code Online (Sandbox Code Playgroud)

即使您将类分配给具有不同名称的变量,Foo仍将是"官方"名称,即:Bar.__name__仍将是'Foo'.

打印类或实例时,您会看到区别:

>>> Bar = collections.namedtuple('Foo', 'field')
>>> obj = Bar(field=1)
>>> obj
Foo(field=1)
Run Code Online (Sandbox Code Playgroud)

你可能会问为什么namedtuple需要类型名称,因为它是多余的(按照惯例).好吧,分配变量之前namedtuple构建类型,因此它无法推断类型名称,需要明确告知它.(或者更好:它可以通过检查调用者的代码推断出名称,但这是hackish并且不适用于非传统情况.)

  • 原谅我,但这就是我不明白的地方。为什么有两件事?为什么我们需要正式名称和名称可能不同的变量? (2认同)