在Python中调用dir()

在Python中调用dir(),python,Python,在Python解释器中调用dir()时,查询的对象是什么 我正在使用一个包,我希望能够从全局字典中获取函数的名称。我原以为它是dir(\uu global),但事实并非如此,也不是dir(sys.modules) 如果我在一个新的解释器会话中键入dir(),它会说 ['__builtins__', '__doc__', '__name__', '__package__'] 什么是dir(ob)中的ob会给我同样的回答 dir()返回当前作用域中的名称。我现在记不起它是否完全等同于locals(

在Python解释器中调用
dir()
时,查询的对象是什么

我正在使用一个包,我希望能够从全局字典中获取函数的名称。我原以为它是
dir(\uu global)
,但事实并非如此,也不是
dir(sys.modules)

如果我在一个新的解释器会话中键入
dir()
,它会说

['__builtins__', '__doc__', '__name__', '__package__']

什么是
dir(ob)
中的
ob
会给我同样的回答

dir()
返回当前作用域中的名称。我现在记不起它是否完全等同于
locals().keys()
,或者有什么区别。

8年后重新阅读您的问题,我现在想知道您是否在询问在Python提示符下以交互方式运行
dir()
,我和其他答案完全无法解决这种情况

在这种情况下,实际答案是:

当您在Python解释器中键入
dir()
时,它会在
\uuuuu main\uuuuu
模块上运行
dir()
,因为Python提示符在该命名空间中运行您键入的语句

要自己执行此操作,只需运行:

import sys
dir(sys.modules['__main__'])
您将看到与以交互方式运行
dir()
时完全相同的名称。试着做一个赋值,比如
a=1
,然后运行普通的
dir()
和上面显示的表达式;您将看到,它们都显示相同的名称列表,现在包括
'a'



dir()
方法调用复杂而深入的操作来尝试预测您查询的对象上可能存在哪些属性,但运行时遇到了一个障碍,即它无法实际尝试访问找到的属性名称,以查看它们是否返回
AttributeError
。我知道,这个答案比你现在想要的要详细得多;但对于那些后来可能会遇到这个问题的人来说,他们的需求更为复杂,“这是Michael Food的一篇博客文章,详细介绍了其中的一些神奇之处。

这比我需要说的要多得多,但也不多,而且它认为我的问题是主观的。正如您所看到的,它非常非常不一样。如果没有向它传递参数,它将返回当前的局部范围。你的问题可以用更好的措辞,因为我仍然不确定你想要的是什么。我如何处理本地范围?它是python对象,对吗?如何处理此对象?如何处理当前范围?那个对象是什么?@Narcolapser:本地作用域是幕后的一个字典,
locals()
可以返回它。就是这样!非常感谢。我会在5分钟内给你做正确的标记。xD@eryksun:CPython实现细节不是Python语义的证明:P