根据 Python 文档,dir()
(不带 args)和locals()
计算结果为名为local scope
. 第一个返回名称列表,第二个返回名称-值对字典。这是唯一的区别吗?这总是有效的吗?
assert dir() == sorted( locals().keys() )
根据 Python 文档,dir()
(不带 args)和locals()
计算结果为名为local scope
. 第一个返回名称列表,第二个返回名称-值对字典。这是唯一的区别吗?这总是有效的吗?
assert dir() == sorted( locals().keys() )
不带参数调用时的输出与dir()
几乎相同locals()
,但dir()
返回字符串列表并locals()
返回字典,您可以更新该字典以添加新变量。
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
locals(...)
locals() -> dictionary
Update and return a dictionary containing the current scope's local variables.
类型:
>>> type(locals())
<type 'dict'>
>>> type(dir())
<type 'list'>
使用更新或添加新变量locals()
:
In [2]: locals()['a']=2
In [3]: a
Out[3]: 2
但是,dir()
这不起作用:
In [7]: dir()[-2]
Out[7]: 'a'
In [8]: dir()[-2]=10
In [9]: dir()[-2]
Out[9]: 'a'
In [10]: a
Out[10]: 2
确切的问题是“使用什么函数来检查是否在本地范围内定义了某个变量”。
在 Python 中访问未定义的变量会引发异常:
>>> undefined
NameError: name 'undefined' is not defined
就像任何其他异常一样,您可以捕获它:
try:
might_exist
except NameError:
# Variable does not exist
else:
# Variable does exist
我需要了解语言架构才能编写更好的代码。
那不会使您的代码更好。你永远不应该让自己陷入需要这种事情的境地,这几乎总是错误的方法。