检查 locals() 中是否存在变量

tho*_*ask 1 python

我遇到了一个奇怪的情况。我想检查我的变量x, y, 是否z存在。

为此,我尝试了:

>>> [var in locals() for var in ["x", "y", "z"]]
[False, False, False]
Run Code Online (Sandbox Code Playgroud)

然后,我给你xyz一些值:

>>> x, y, z = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

尽管如此,我仍然有:

>>> [var in locals() for var in ["x", "y", "z"]]
[False, False, False]
Run Code Online (Sandbox Code Playgroud)

但是 x, y, z 一一存在:

>>> for var in ["x", "y", "z"]: 
...     print(var in locals())
... 
True
True
True
Run Code Online (Sandbox Code Playgroud)

有人有解释吗?

tom*_*pin 6

请参阅:https : //portingguide.readthedocs.io/en/latest/comprehensions.html

在 Python 3 中,列表表达式有自己的作用域:它们是函数,只是用特殊的语法定义,并自动调用。因此,迭代变量不会“泄漏”:

在理解之外引用 locals()

>>> my_locals = locals()
>>> [var in my_locals for var in ["x", "y", "z"]]
[True,True,True]

Run Code Online (Sandbox Code Playgroud)