这期的话题有点简单, 整理下常见的模块内置方法html
刚开始学Python的时候, 看到if __name__ == '__main__': main()
就不明觉厉了, 一直好奇__name__
这货究竟是个什么东东python
实际上, __name__
是Python中模块的内置属性, 除此以外, 常常用到的还有__file__
, __doc__
, __all__
, __package__
等等python2.7
__name__
__name__
是模块内置的一个属性, 通常若是模块是被引用的时候, 它的值是模块名, 若是这个python文件被直接运行, 那么它的值是'__main__'
code
>>> __name__ '__main__' >>> import os >>> os.__name__ 'os'
因此咱们写一个脚本的时候,经过判断__name__
来肯定脚本是被引用, 仍是被直接运行htm
if __name__ == `__main__`: main()
__file__
被引用模块文件的路径文档
>>> import os >>> os.__file__ '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'
__doc__
模块的注释文档get
class MyClass: """这是MyClass的注释, 调用下面myClass.__doc__的时候会返回这段内容""" def funcA(self): """这是funcA的注释文档""" return "hello" myClass = MyClass()
调用myClass.__doc__
会返回MyClass
的注释文档, myClass.funcA.__doc__
会返回funcA
的注释文档it
若是执行help(MyClass)
, 所看到的文档实际就是DocStrings
收集该类下全部的注释生成的文档io
__all__
当你写一个Python的模块的时候, 通常在__init__.py
中指定__all__
来表示当这个模块被import * from xxx
的时候, 有哪些模块会被import
进来,class
固然, 咱们推荐尽可能不使用import *
__package__
__package__
主要是为了相对引用而设置的一个属性, 若是所在的文件是一个package
的话, 它和__name__
的值是同样的, 若是是子模块的话, 它的值就跟父模块一致
好比 modA/modB/aa.py
中__name__
的值是modA.modB.aa
__package__
是modA.modB
modA/modB/__init__.py
中__name__
和__package__
的值都是modA.modB