为什么直接在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子句中的可迭代表达式外,推导式在单独的隐式嵌套作用域中执行。这确保分配给目标列表中的名称不会“泄漏”到封闭范围中。


以上是为什么直接在all(…)中使用dir()在python中总是返回False?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>