Python中dir()和locals()之间有什么区别吗?

Python中dir()和locals()之间有什么区别吗?,python,Python,根据Python文档,dir()。第一个返回名称列表,第二个返回名称-值对字典。这是唯一的区别吗?这总是有效的吗 assert dir() == sorted( locals().keys() ) 无参数调用时,dir()的输出几乎与locals()相同,但dir()返回字符串列表,而locals()返回字典,您可以更新该字典以添加新变量 dir(…) dir([object])->字符串列表 如果在没有参数的情况下调用,则返回当前作用域中的名称。 本地人(…) 局部变量()->字典 更新并返

根据Python文档,
dir()。第一个返回名称列表,第二个返回名称-值对字典。这是唯一的区别吗?这总是有效的吗

assert dir() == sorted( locals().keys() )
无参数调用时,
dir()
的输出几乎与
locals()
相同,但
dir()
返回字符串列表,而
locals()
返回字典,您可以更新该字典以添加新变量

dir(…)
dir([object])->字符串列表
如果在没有参数的情况下调用,则返回当前作用域中的名称。
本地人(…)
局部变量()->字典
更新并返回包含当前作用域的局部变量的字典。

类型:

但是,使用
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
我需要了解语言体系结构才能编写更好的代码


这不会使你的代码更好。永远不要让自己陷入需要这样做的情况,这几乎总是错误的方法。

由于Python优化对函数中局部变量的访问的方式,通常不可能使用
locals()
字典更改局部变量,这就是为什么文档警告它的原因。
>>> undefined
NameError: name 'undefined' is not defined
try:
    might_exist
except NameError:
    # Variable does not exist
else:
    # Variable does exist