模塊的內置方法--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

相關文章
相關標籤/搜索