[英]Recursive function calls in python in list comprehension gives different result than assigning the result of the call to a variable first
为什么不这样:
def subsets(x):
if not x:
return [[]]
else:
return [x + y for x in [[], [x[0]]] for y in subsets(x[1:])]
print subsets(['a', 'b'])
产生与此相同的输出:
def subsets(x):
if not x:
return [[]]
else:
z = subsets(x[1:])
return [x + y for x in [[], [x[0]]] for y in z]
print subsets(['a', 'b'])
问题是您将名称x
用于两种不同的事物。 当您将x
作为变量引入列表理解中时,它会隐藏x
中定义的x
。 结果,列表理解中的最后一个x
并未引用您希望的x
。
将x
之一重命名为其他名称可解决此问题:
def subsets(original_x):
if not original_x:
return [[]]
else:
return [x + y for x in [[], [original_x[0]]]
for y in subsets(original_x[1:])]
我还建议您尝试为变量找到更多的描述性名称。 这将减少意外重用名称的可能性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.