在Python中理解dir()

时间:2014-09-30 11:11:26

标签: python

我正在查找Python中dir()的使用,我遇到了以下示例,其中support只是一个用户定义的模块,其中包含函数print_func,该函数打印传递的参数它。

print dir(support)

Output: ['__builtins__',
        '__doc__',
        '__file__',
        '__name__',
        '__package__',
        'print_func']

我基本上不明白以下陈述的含义:

  

在上面的调用中,__name__是模块的文件名,__file__是加载模块的文件名。

Aren&#t; t __name____file__一样?

1 个答案:

答案 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模块。