Skip to main content

Python 入门基础知识 - 模块独立运行-__name__属性及dir()函数

Python 入门基础知识 - 模块独立运行-__name__属性及dir()函数

模块独立运行-__name__属性

每个Python脚本在运行时都有一个__name__属性(name前后均是两条下划线)。在脚本中通过

对__name__属性值的判断,可以让脚本在作为导入模块和独立运行时都可以正确运行。在Python

中如果脚本作为模块被导入,则其__name__属性被设置为模块名。如果脚本独立运行,则其__name__属性

被设置为"__main__"。因此可以通过__name__属性来判断脚本的运行状态。

如下所示脚本,既可以自己运行,也可以作为模块被其他脚本导入。

# file:testmodule2.py
def show():
    print 'I am a module!'
if __name__ == '__main__':
    show()
    print 'I am not a module!'

建立脚本usemodule2.py,内容如下:

_*_ coding: utf-8 -*-
import testmodule2

testmodule2.show()
print('my __name__ is %s' % __name__)

运行usemodule2.py,输出内容如下:

I am a module!
my __name__ is __main__

运行testmodule2.py,输出内容如下:

I am a module!
I am not a module!

dir()函数

如果需要获得导入模块中的所有定义的名字、函数等,可以使用内置函数dir()来获得模块所定义的名字的列表。

如下所示代码获得sys模块中的名字。

import sys
print(dir(sys))

输出的内容如下

['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', '_mercurial', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']

dir()函数的原型如下所示。

dir([object])

其参数含义如下。

-object 可选参数,要列举的模块名。

如果不向dir()函数传递参数,那么dir()函数将返回当前脚本的所有名字列表,如下所示。

a = [1, 3, 6]
b = 'Python'
print(dir())

输出后的内容如下:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'show', 'sys']

在加入一个函数后,输出试试

def func():
    print 'Python'
print(dir())

输出后结果类似如下

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'func', 'show', 'sys']

版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/46