9

根据 Python 文档,dir()(不带 args)和locals()计算结果为名为local scope. 第一个返回名称列表,第二个返回名称-值对字典。这是唯一的区别吗?这总是有效的吗?

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

2 回答 2

7

不带参数调用时的输出与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
于 2012-10-16T15:31:36.647 回答
0

确切的问题是“使用什么函数来检查是否在本地范围内定义了某个变量”。

在 Python 中访问未定义的变量会引发异常:

>>> undefined
NameError: name 'undefined' is not defined

就像任何其他异常一样,您可以捕获它:

try:
    might_exist
except NameError:
    # Variable does not exist
else:
    # Variable does exist

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

那不会使您的代码更好。你永远不应该让自己陷入需要这种事情的境地,这几乎总是错误的方法。

于 2012-10-17T10:32:11.797 回答