python - 为什么我不能在 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
在python2
和python3
中,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
解决方案
推荐阅读
- build - rzc 生成退出,代码为 -2147450730
- java - 如何在 Spring Boot 的路径变量中传递本地日期?
- jwt - Keycloack jwt 配置 - 如何隐藏或省略 jwt 令牌的 resource_access
- javascript - Tableau Javascript API
- javascript - 如何检测移动键盘是否显示在 Web 中?
- python - Bottle web 框架:如何将 csv 文件返回给 Angular 客户端
- sql-server - ApplicationDbContext 在当前上下文中不存在?
- json - 使用 jq 从多个文件创建合并的 JSON 数组
- javascript - 如何使用方法更改道具值 - Vue.js
- javascript - 如何使用angularjs根据名称过滤和分组数据?