python 模块 包 库_模块(包、库)
模塊的基本概念:
模塊是程序,它就是一個擴展名為.py的python程序。因此對于一個.py的python文件而言,既可以把它當作程序來執行,也可以將它作為模塊引入。
導入一個模塊時,python解釋器會先自動在當前路徑下搜索要導入的模塊,如果沒有找到,則會自動到python標準模塊安裝路徑(python默認自帶的)中搜索,如果還沒找到,則報錯ModuleNotFoundError。
在sys模塊的path屬性中,可以看到python自動導入的所有路徑(以列表的形式存放)。sys的path屬性中除了本來就有的python系統自帶的標準模塊的路徑之外,還會將當前執行文件的路徑臨時的加到path屬性中。所以,python解釋器可以在當前路徑中找模塊,事實上跟同級路徑的概念并沒有關系,而是python解釋器將執行文件的所在路徑臨時的加到了path屬性中,且放在了第一個位置。
除了python可以自動尋找的路徑之外,我們還可以指定路徑,并將路徑告訴python解釋器。因此對于我們自己寫的文件,要想可以作為模塊被導入,有三種方法:
將模塊寫在當前目錄中,python會直接自動找到;
將模塊發布并安裝到python標準模塊安裝的路徑中,python也可以自動找到;
將我們自己寫的模塊路徑append到sys模塊的path屬性列表中,即告訴python解釋器,我們自定義的模塊的路徑位置。
執行了.py文件后,會發現目錄中多了一個__pycache__的目錄,這個目錄中存放著執行.py文件后生成的文件中的import導入的模塊的編譯文件,下次再執行該文件時,遇到import導入的相同模塊時,將直接執行此編譯文件,不再重新編譯相同的模塊,節省執行時間。
__all__在模塊中的作用:
當使用“ from 模塊名 import * ”的方式從模塊中導入所有內容時,模塊中以_或著__開頭的私有屬性、函數或者類將不會被導入,因為以這種方式導入模塊中的內容時,導入的將是模塊中__all__屬性中的內容。在默認情況下,私有屬性、函數或者類是不會被放到__all__屬性中的。當然我們可以自定義模塊的__all__屬性中的內容,讓模塊中的哪些屬性、函數或者類(包括私有的)可以被導入。
如果是通過“ import 模塊名 ”的方式導入模塊,則可以用“ 模塊名. ”的方式來訪問模塊中的所有屬性、函數和類(包括私有的)。因為只有通過“ from 模塊名 import * ”的方式才會導入模塊中__all__中的內容。
模塊中還有一個__file__屬性,它可以告訴我們此模塊的位置(路徑)。
當一個.py文件作為模塊被導入時,實際上會執行一次該文件。我們導入模塊時,只是想要模塊中的類、函數或者變量等,而并不是要真正的去執行該文件。所以在文件中,被執行的代碼或者要調試的代碼,應寫在if __name__ == ‘__main__’:中。當文件作為模塊導入時,則不會執行if __name__ == ‘__main__’中的內容;當文件作為.py文件執行或者調試時,就會執行if __name__ == ‘__main__’中的內容。因為文件作為模塊導入的時候被執行時,__name__得到的是文件名路徑的字符串;直接作為.py文件執行時,__name__得到的時’__main__’字符串。
包和庫:
python標準庫中包含多個包,每個包中又有多個模塊,包即是目錄(文件夾),用來存放模塊。當要引用某個包中的模塊時,需要在該包中放一個__init__.py文件。__init__.py可以只是一個空文件,將它放在某個目錄中,就可以使得該目錄中的其它.py文件能夠作為模塊被引用。
注意,每一個包中的__init__.py文件是必須存在的,否則,Python就會把這個目錄當成普通目錄(文件夾),而不是一個包。__init__.py可以是空文件,也可以有Python代碼,因為__init__.py本身就是一個模塊,而它的模塊名就是對應包的名字。調用包就是執行包中的__init__.py文件。
總結
以上是生活随笔為你收集整理的python 模块 包 库_模块(包、库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ble 连接成功后找不到服务_闷声发大财
- 下一篇: android 打开系统相册_这5款常用