我正在使用CPython3.6.2
,当执行print(dir())
时,我得到:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
例如,dir
内建函数在__builtins__
内,因此如果上面的模块只针对print(dir())
显示,那么python应该做如下操作:
但如果这是真的,我可以看到使用print(dir())
模块__builtins__
和其他构建函数。在
因此,我的问题是如何查看预加载的模块(使用dir()
),而不是内置函数,即使我可以直接访问它们(例如不使用__builtins__.dir
)。在
报价文件:
您的模块范围中未定义内置函数。就这么简单。在
当然,在显式导入它们之后,您可以在本地范围内创建名称,这些名称指向全局范围中的名称相同的对象。在
这是Python范围解析如何工作的结果。在
Dir()返回当前命名空间中的名称列表。那么为什么它不返回内置函数呢?在
为什么,因为显然它们不在当前名称空间中。在
Import*将把任何模块中的所有函数都转储到当前名称空间中,但这对于提供对内置函数的访问是不必要的。在
同样,如果Python没有找到变量的局部定义,在类或函数中或其他任何地方,如果找不到一个名为被引用的全局变量,它就开始在内置函数模块中查找它。在
TL;DR-为什么看不到使用bare dir()的内置函数?因为它们不在本地范围内,也不需要在那里工作。在
相关问题 更多 >
编程相关推荐