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

时间:2012-10-16 15:29:04

标签: python

根据Python文档,dir()(没有args)和locals()都会评估名为local scope的变量列表。第一个返回名称列表,第二个返回名称 - 值对的字典。这是唯一的区别吗?这总是有效吗?

assert dir() == sorted( locals().keys() )

2 个答案:

答案 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
  

我需要了解语言架构才能编写更好的代码。

这不会使你的代码变得更好。你应该从不让自己陷入需要这样的事情的境地,这几乎总是错误的做法。