命名元组的名称和引用可以不同吗?

Can the name and the reference of a named tuple be different?

在阅读 fmark 对问题 What are "named tuples" in Python? 的回答时,我看到那里给出的示例具有相同的名称和引用,即单词 Point 在下面出现了两次声明:

Point = namedtuple('Point', 'x y')

所以我去参考原文:
https://docs.python.org/2/library/collections.html#collections.namedtuple
在这里我也找到了两个例子:

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Color = namedtuple('Color', 'red green blue')

最好不要在 Python 中重复单词。例如,整行(对于 Point 示例)可以替换为以下内容:

namedtuple('Point', 'x y')

Point = namedtuple('x y')

当然,这是假设命名的元组必须具有相同的名称和引用。所以我的问题是:什么时候建议(如果允许的话)命名元组应该有不同的名称和引用?我还没有遇到一个例子。

你可以做到,它只会惹恼你。

In [1]: import collections

In [2]: Point = collections.namedtuple('Rectangle', 'x y')

In [3]: Point(1, 2)
Out[3]: Rectangle(x=1, y=2)

这很令人困惑,除非你有充分的理由,否则不要这样做。

发生这种情况的原因是因为namedtuple()只是一个函数,它不知道如何将其用作声明。在具有宏的语言中,namedtuple() 将是一个扩展为声明的宏。因此,您必须指定两次名称,而不是附加宏系统或遍历调用堆栈。

所以它是 Python 的 "warts" 之一,或者是设计上的妥协,具体取决于您的感受。