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

时间:2015-03-31 00:39:28

标签: python tuples namedtuple

在阅读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')

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

1 个答案:

答案 0 :(得分:12)

你可以做到,它只会让你烦恼。

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"疣"之一,或设计妥协,取决于你对它的感受。