這期的話題有點簡單, 整理下常見的模塊內置方法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