根据Python文档,dir()
(没有args)和locals()
都会评估名为local scope
的变量列表。第一个返回名称列表,第二个返回名称 - 值对的字典。这是唯一的区别吗?这总是有效吗?
assert dir() == sorted( locals().keys() )
答案 0 :(得分:5)
不带参数调用时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
答案 1 :(得分:0)
确切的问题是'用什么函数来检查是否在本地范围内定义了某个变量'。
在Python中访问未定义的变量会引发异常:
>>> undefined
NameError: name 'undefined' is not defined
就像任何其他例外一样,你可以抓住它:
try:
might_exist
except NameError:
# Variable does not exist
else:
# Variable does exist
我需要了解语言架构才能编写更好的代码。
这不会使你的代码变得更好。你应该从不让自己陷入需要这样的事情的境地,这几乎总是错误的做法。