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