函数生成无限的嵌套列表

时间:2014-05-25 00:38:53

标签: python-2.7 nested-lists

我正在按照此功能进行一些实验:Hidden features of Python

使用的代码是:

def f(x = []):
    x.append(x)
    return x

输出是:

>>> f()
[[...]]

我想了解[...]的含义以及生成无限嵌套列表的原因。

2 个答案:

答案 0 :(得分:1)

将一个列表附加到自身将构成一个循环结构,[...]意味着无限地重复它。

答案 1 :(得分:0)

您必须了解函数默认值在首次创建函数时计算,而不是在运行时计算。首先,您的代码等同于:

X = []
def f(x=X):
    x.append(x)
    return x

如果你只运行一次,那么这相当于:

X = []
X.append(X)

创建一个列表,然后将自己设置为第一个元素。因此,从X == X[0]开始,X == X[0][0]X == X[0][0]...[0]