模块的内置方法--Python提升班

这期的话题有点简单, 整理下常见的模块内置方法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

参考: The import system

相关文章
相关标签/搜索