python - Python:类内的函数范围
问题描述
让我们考虑下面的代码。
name = "John"
class MyClass:
name = "Tom"
list_1 = [name] * 2
list_2 = [name for i in range(2)]
乍一看,人们可能期望list_1
和list_2
都具有相同的内容:["Tom", "Tom"]
,但事实并非如此。list_1
计算为
["Tom", "Tom"]
,而list_2
计算为["John", "John"]
。
我读到,当一个函数嵌套在一个类中时,Python 将使用在模块范围内而不是在类范围内定义的变量。list_1
不是函数,因此它name
在类范围内使用,而list_2
is 是一个函数,因此name
在模块范围内使用。我知道这就是它的工作原理,但这似乎违反直觉。我不明白原因。
解决方案
使用列表推导确定范围需要一些时间来适应。在这种情况下,列表推导中的本地范围会list2 = [name for i in range(2)]
暂时阻止类本地范围。见:这个答案。
推荐阅读
- javascript - 如何在nodejs中创建临时文件
- python - 如何在 Python 的循环中检索 DataFrame 的列?
- android - Ionic Android App 仅在某些设备上运行,在其他一些设备上启动屏幕后仅显示空白屏幕
- cmake - 如何使安装目标依赖于生成的(protobuf)文件
- python - 将 JSON 格式结构化为指定的数据结构
- javascript - 我有一个图片库,我想在单击每个图片时使用模态打开每个图片
- c++ - 为什么 C++20 不允许在 requires-expression 中使用类型别名?
- sql - Cakephp 4.x 自定义查询
- javascript - 如何将变量设置为特定的语音通道 discord.js?
- html - 我的导航栏没有与我的英雄部分重叠