为什么直接在all(…)中使用dir()在python中总是返回False?
我想知道是否导入了多个模块,并尝试了以下3种方法。但我发现他们的结果是不同的。我想知道为什么直接使用dir()inall(...)会导致错误的结果?
import re, os
# Approach 1
all(k in dir() for k in ('re', 'os')) # False
# Approach 2
're' in dir() and 'os' in dir() # True
# Approach 3
list = dir()
all(k in list for k in ['re', 'os']) # True
回答
dir()不带参数取决于当前范围:
不带参数,返回当前本地范围内的名称列表。
在生成器表达式中,范围发生了变化:
>>> list(dir() for _ in ("re", "os"))
[['.0', '_'], ['.0', '_']]
这也适用于列表、集合和字典推导式:
除了最左边
for子句中的可迭代表达式外,推导式在单独的隐式嵌套作用域中执行。这确保分配给目标列表中的名称不会“泄漏”到封闭范围中。
THE END
二维码