模块独立运行-__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']