gpt4 book ai didi

python - 什么是 Python 类中的列表理解范围规则?

转载 作者:太空狗 更新时间:2023-10-29 17:50:09 26 4
gpt4 key购买 nike

<分区>

在下面的代码中,mc 赋值在 Python 2 和 3 中工作正常。

cc 赋值在类中使用相同的列表理解,在 Python 2 中有效,但在 Python 3 中失败。

如何解释这种行为?

ml1 = "a b c".split()
ml2 = "1 2 3".split()
mc = [ i1 + i2 for i1 in ml1 for i2 in ml2 ]

class Foo(object):
cl1 = ml1
cl2 = ml2

cc1 = [ i1 for i1 in cl1 ]
cc2 = [ i2 for i2 in cl2 ]
cc = [ i1 + i2 for i1 in cl1 for i2 in cl2 ]


print("mc = ", mc)
foo = Foo()
print("cc = ", foo.cc)

我明白了:

(default-3.5) snafu$ python2 /tmp/z.py 
('mc = ', ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3'])
('cc = ', ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3'])

(default-3.5) snafu$ python3 /tmp/z.py
Traceback (most recent call last):
File "/tmp/z.py", line 5, in <module>
class Foo(object):
File "/tmp/z.py", line 11, in Foo
cc = [ i1 + i2 for i1 in cl1 for i2 in cl2 ]
File "/tmp/z.py", line 11, in <listcomp>
cc = [ i1 + i2 for i1 in cl1 for i2 in cl2 ]
NameError: name 'cl2' is not defined

为什么没有定义类变量cl2?请注意,cc2 分配工作正常,cc1 也是如此。在理解中交换 cl1cl2 表明第二个循环是触发异常的循环,而不是 cl2 本身。)

版本:

(default-3.5) snafu$ python2 --version
Python 2.7.11+
(default-3.5) snafu$ python3 --version
Python 3.5.1+

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com