在collections.namedtuple()构造函数中,第一个参数是您要创建的类型的名称,但据我所知,除了诊断消息之外,它是无关紧要的。
from collections import namedtuple
Point = namedtuple('Point', 'x y')
p = Point(1,2) # works fine, creates Point(x=1, y=2)
Point = namedtuple('blah', 'x y')
p = Point(2,3) # works fine, creates blah(x=1,y=2)
这只是程序员为诊断目的而保持一致的必要项目,因为Python没有办法学习你将namedtuple分配给的变量的名称吗?似乎容易出错,但我可以看到它是如何必要的。只是想知道是否有任何其他原因或影响这两个名称不匹配。
答案 0 :(得分:4)
命名元组以一种肮脏的方式实现。有一个模板字符串有一些占位符,当你调用namedtuple()
时,实际上会发生这些占位符被参数替换而模板是eval
'd。这个实现看起来很脏(因为它使用了eval)但是非常简单和强大。
缺点是实际需要一个类名,因为其中一行实际上就是这样:class {typename}(tuple):
。因此,您需要为其指定类型名称。
至于该名称的值,它并不重要,但正如您所说,出于调试目的,选择与包含该类型的变量同样使用的相同名称也很有用。否则,整件事情就不会有太大的不同了:
class CustomType:
…
# assign a new name, and never talk about CustomType again
NewName = CustomType