首页 > 解决方案 > 为什么我不能在 Python3 的理解中使用相同范围内的外部类变量,但我可以在 Py2 中使用?

问题描述

有了这个样本...

#!/usr/bin/python
class MyClass(object):
    y = 1
    pdq = y
    q = 'abc{}'.format(y)
    z = [_.format(y) for _ in ['a: {}',
                               'b: {}',
                               'c: {}']
         ]
    def __init__(self, val):
        self.val = val

python2python3中,MyClass('x').q正确设置。

python2.7,MyClass('x').z被正确填充。它在导入时崩溃python3,无法y在理解中找到。我有点不知道为什么 -Python3在编译期间更积极地展开理解?

Python2

> ipython2
Python 2.7.17 (default, Nov  7 2019, 10:07:09)
In [1]: from tester import MyClass

In [2]: MyClass(123)
Out[2]: <tester.MyClass at 0x7f6a7cb79b90>

In [3]: MyClass(123).val
Out[3]: 123

In [4]: MyClass(123).z
Out[4]: ['a: 2', 'b: 2', 'c: 2']

Python3

> ipython3
Python 3.7.5 (default, Nov  7 2019, 10:50:52)

In [1]: from tester import MyClass
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-718df2f3bae2> in <module>()
----> 1 from tester import MyClass

tester.py in <module>()
      1 #!/usr/bin/python3
----> 2 class MyClass(object):
      3     x = 1
      4     y = 2
      5     pdq = y

tester.py in MyClass()
      5     pdq = y
      6     q = 'abc{}'.format(y)
----> 7     z = [_.format(y) for _ in ['a: {}',
      8                                'b: {}',
      9                                'c: {}']

tester.py in <listcomp>(.0)
      5     pdq = y
      6     q = 'abc{}'.format(y)
----> 7     z = [_.format(y) for _ in ['a: {}',
      8                                'b: {}',
      9                                'c: {}']

NameError: name 'y' is not defined

标签: python

解决方案


推荐阅读