python2 中的理解列表工作正常,但我在 python3 中出现错误



>我有以下代码使用综合列表:

x = int ( input())  
y = int ( input()) 
z = int ( input())
n = int ( input()) 

ret_list = [ (x,y,z) for x in range(x+1) for y in range(y+1) for z in 
range(z+1) if x+y+z!=n ]
print(ret_list)

在 python2 中按预期工作。但是在python3中,我收到以下错误:

print([ (x,y,z) for x in range(x+1) for y in range(y+1) for z in range(z+1) if 
x+y+z!=n ])
File "tester.py", line 16, in <listcomp>
print([ (x,y,z) for x in range(x+1) for y in range(y+1) for z in range(z+1) if 
x+y+z!=n ])
UnboundLocalError: local variable 'y' referenced before assignment

我只是好奇我做错了什么。我可能在 Python3 中缺少一些东西,尽管它在 python2 中效果很好。谢谢。

由于xyz在列表推导中被定义为"局部"变量,Python 3 将它们视为这样,并且不使用/查看全局值。

Python 2 没有这种区别(因此有些人在退出理解时观察到变量"泄漏"(,它的行为与使用正常循环的行为完全相同。

这在这里得到了更好的解释:Python 列表推导即使在理解范围之后也会重新绑定名称。这是对的吗?

真正有趣的是,python首先抱怨y而不是x。好吧,既然我很好奇,我在这里问了这个问题:为什么UnboundLocalError发生在平面理解的第二个变量上?

正确的方法是为循环索引使用不同的变量名称(不确定我选择的名称是否非常好,但至少无论 python 版本如何,这都有效(:

ret_list = [ (x1,y1,z1) for x1 in range(x+1) for y1 in range(y+1) for z1 in range(z+1) if x1+y1+z1!=n ]

相关内容

  • 没有找到相关文章

最新更新