詳細一文帶你分清Python中的模塊、包和庫
一、模塊
Python 模塊(Module),是一個 Python 文件,以 .py 結(jié)尾,包含了 Python 對象定義和Python語句。
模塊能定義函數(shù),類和變量,模塊也能包含可執(zhí)行的代碼。
1.1 導入模塊
1.1.1 導入模塊的方式
- import 模塊名
- from 模塊名 import 功能名
- from 模塊名 import *
- import 模塊名 as 別名
- from 模塊名 import 功能名 as 別名
1.1.2 導入方式詳解
import 語法:
# 1. 導?模塊 import 模塊名 import 模塊名1, 模塊名2... # 2. 調(diào)?功能 模塊名.功能名()
體驗:
import math print(math.sqrt(9)) # 3.0
from..import..
語法:
from 模塊名 import 功能1, 功能2, 功能3...
體驗:
from math import sqrt print(sqrt(9))
from..import *
語法
from 模塊名 import *
體驗:
from math import * print(sqrt(9))
as定義別名
語法
# 模塊定義別名 import 模塊名 as 別名 # 功能定義別名 from 模塊名 import 功能 as 別名
體驗
# 模塊別名 import time as tt tt.sleep(2) print('hello') # 功能別名 from time import sleep as sl sl(2) print('hello')
1.2 制作模塊
在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。
也就是說定義模塊名必須要符合標識符命名規(guī)則。
1.2.1 定義模塊
新建一個Python文件,命名為 my_module1.py ,并定義 testA 函數(shù)。
def testA(a, b): print(a + b)
1.2.2 測試模塊
在實際開中,當一個開發(fā)員編寫完一個模塊后,為了讓模塊能夠在項目中達到想要的效果,這個開發(fā)員會在py文件中添加一些測試信息
例如,在 my_module1.py 文件中添加測試代碼。
def testA(a, b): print(a + b) testA(1, 1) 12345
此時,無論是當前文件,還是其他已經(jīng)導入了該模塊的?件,在運行的時候都會自動執(zhí)行 testA 函數(shù)的調(diào)用。
解決辦法如下:
def testA(a, b): print(a + b) # 只在當前?件中調(diào)?該函數(shù),其他導?的?件內(nèi)不符合該條件,則不執(zhí)?testA函數(shù)調(diào)? if __name__ == '__main__': testA(1, 1)
1.2.3 調(diào)用模塊
import my_module1 my_module1.testA(1, 1)
1.2.4 注意事項
如果使用 from .. import .. 或 from .. import * 導入多個模塊的時候,且模塊內(nèi)有同名功能。
當調(diào) ?這個同名功能的時候,調(diào)用到的是后導入的模塊的功能。
體驗:
# 模塊1代碼 def my_test(a, b): print(a + b) # 模塊2代碼 def my_test(a, b): print(a - b) # 導?模塊和調(diào)?功能代碼 from my_module1 import my_test from my_module2 import my_test # my_test函數(shù)是模塊2中的函數(shù) my_test(1, 1)
1.3 模塊的定位順序
當導入一個模塊,Python解析器對模塊位置的搜索順序是:
1. 當前目錄
2. 如果不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每個目錄。
3. 如果都找不到,Python會察看默認路徑。UNIX下,默認路徑?般為/usr/local/lib/python/
模塊搜索路徑存儲在system模塊的sys.path變量中。
變量包含當前目錄,PYTHONPATH和由安裝過 程決定的默認目錄。
注意
- ??的?件名不要和已有模塊名重復(fù),否則導致模塊功能用法使用
- 使用from 模塊名 import 功能 的時候,如果功能名字重復(fù),調(diào)用到的是最后定義或?qū)氲墓?能。
1.4 __all__
如果一個模塊文件中有 __all__ 變量,當使用 from xxx import * 導入時,只能導入這個列表中的元素。
my_module1模塊代碼:
__all__ = ['testA'] def testA(): print('testA') def testB(): print('testB')
導入模塊的文件代碼:
from my_module1 import * testA() testB()
二、庫
嚴格來說,Python中沒有庫(library)的概念,模塊(module)和包(package)才是Python語法中有的概念。
這個庫的概念是從其他編程語言引進來的,庫的概念是具有相關(guān)功能模塊的集合,只是一個通俗的說法。
平時說的庫既可以是一個模塊,也可以是一個包。
包和模塊之間的關(guān)系,如下圖:
一個包里面可以包含很多的模塊。
模塊是一個包含有組織的代碼片段,一個.py文件對應(yīng)一個模塊,文件名就是模塊名(去除掉后綴.py)。
三、包
包將有聯(lián)系的模塊組織在一起,即放到同一個文件夾下,并且在這個文件夾創(chuàng)建一個名字 為 __init__.py 文件,那么這個文件夾就稱之為包。
3.1 制作包
[New] — [Python Package] — 輸入包名 — [OK] — 新建功能模塊(有聯(lián)系的模塊)。
注意:新建包后,包內(nèi)部會自動創(chuàng)建 __init__.py 文件,這個文件控制著包的導入。
快速體驗
1. 新建包 mypackage
2. 新建包內(nèi)模塊: my_module1 和 my_module2
3. 模塊內(nèi)代碼如下
# my_module1 print(1) def info_print1(): print('my_module1')
# my_module2 print(2) def info_print2(): print('my_module2')
3.2 導入包
方法一
import 包名.模塊名包名.模塊名.?標
快速體驗
import my_package.my_module1 my_package.my_module1.info_print1()
方法二
注意:必須在 __init__.py ?件中添加 __all__ = [] ,控制允許導?的模塊列表。
from 包名 import *模塊名.?標
快速體驗
from my_package import * my_module1.info_print1()
到此這篇關(guān)于詳細一文帶你分清Python中的模塊、包和庫的文章就介紹到這了,更多相關(guān)Python中的模塊、包和庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python“靜態(tài)”變量、實例變量與本地變量的聲明示例
這篇文章主要給大家介紹了關(guān)于python“靜態(tài)”變量、實例變量與本地變量的聲明的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11Python常用內(nèi)置函數(shù)和關(guān)鍵字使用詳解
在Python中有許許多多的內(nèi)置函數(shù)和關(guān)鍵字,它們是我們?nèi)粘V薪?jīng)常可以使用的到的一些基礎(chǔ)的工具,可以方便我們的工作。本文將詳細講解他們的使用方法,需要的可以參考一下2022-05-05python多線程性能測試之快速mock數(shù)據(jù)
這篇文章主要為大家介紹了python多線程性能測試之快速mock數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Django 允許局域網(wǎng)中的機器訪問你的主機操作
這篇文章主要介紹了Django 允許局域網(wǎng)中的機器訪問你的主機實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python實現(xiàn)五子棋聯(lián)機對戰(zhàn)小游戲
本文主要介紹了通過Python實現(xiàn)簡單的支持聯(lián)機對戰(zhàn)的游戲——支持局域網(wǎng)聯(lián)機對戰(zhàn)的五子棋小游戲。廢話不多說,快來跟隨小編一起學習吧2021-12-12