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