我正在查找Python中dir()
的使用,我遇到了以下示例,其中support
只是一个用户定义的模块,其中包含函数print_func
,该函数打印传递的参数它。
print dir(support)
Output: ['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'print_func']
我基本上不明白以下陈述的含义:
在上面的调用中,
__name__
是模块的文件名,__file__
是加载模块的文件名。
Aren&#t; t __name__
和__file__
一样?
答案 0 :(得分:3)
不,__name__
和__file__
不一样。
__name__
是Python看到的模块名称;它是模块存储在sys.modules
中的关键。对于sessions
,那将是.... 'sessions'
。
__file__
属性是加载模块的文件名。它可以是.py
文件,如果从bytecache加载.pyc
文件,它可以是共享动态库文件等。
您找到的文字充其量是不精确的。您的sessions
模块可以从文件/foo/bar/baz/sessions.py
加载,然后模块名称sessions
是文件名的一部分。
请注意,__name__
不一定是导入模块的名称:
>>> import os.path as os_path
>>> os_path.__name__
'posixpath'
这里有两件事:我们用不同的名字导入模块; os_path
绑定到os.path
模块对象。但os
模块执行类似的操作:它以新名称导入特定于平台的模块:
if 'posix' in _names:
# ....
import posixpath as path
所以os.path
实际上是posixpath
模块的别名。在Windows上,它将改为使用ntpath
模块。