【Python】模組和包
模組和包
一. 模組
Python 模組(Module),是一個 Python 檔案,以 .py 結尾,包含了 Python 物件定義和Python語句。
模組能定義函式,類和變數,模組裡也能包含可執行的程式碼。
1.1. 匯入模組
1.1.1 匯入模組的方式
- import 模組名
- from 模組名 import 功能名
- from 模組名 import *
- import 模組名 as 別名
- from 模組名 import 功能名 as 別名
1.1.2 匯入方式詳解
1.1.2.1 import
語法
# 1. 導⼊模組 import 模組名 import 模組名1, 模組名2... # 2. 調⽤功能 模組名.功能名()
體驗
import math
print(math.sqrt(9)) # 3.0
1.1.2.2 from..import..
語法
from 模組名 import 功能1, 功能2, 功能3...
體驗
from math import sqrt
print(sqrt(9))
1.1.2.3 from .. import *
語法
from 模組名 import *
體驗
from math import *
print(sqrt(9))
1.1.2.4 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檔案都可以作為一個模組,模組的名字就是檔案的名字。也就是說自定義模組名必須要符合識別符號命名規則。
1.2.1 定義模組
新建一個Python檔案,命名為 my_module1.py ,並定義 testA 函式。
def testA(a, b):
print(a + b)
1.2.2 測試模組
在實際開中,當一個開發人員編寫完一個模組後,為了讓模組能夠在專案中達到想要的效果,這個開發人員會自行在py檔案中新增一些測試資訊.,例如,在 my_module1.py 檔案中新增測試程式碼。
def testA(a, b):
print(a + b)
testA(1, 1)
此時,無論是當前檔案,還是其他已經匯入了該模組的檔案,在執行的時候都會自動執行 testA 函式的呼叫。
解決辦法如下:
def testA(a, b):
print(a + b)
# 只在當前⽂件中調⽤該函式,其他導⼊的⽂件內不符合該條件,則不執⾏testA函式調⽤
if __name__ == '__main__':
testA(1, 1)
1.2.3 呼叫模組
import my_module1
my_module1.testA(1, 1)
1.2.4 注意事項`
如果使用 from .. import .. 或 from .. import * 匯入多個模組的時候,且模組內有同名功能。當呼叫這個同名功能的時候,呼叫到的是後面匯入的模組的功能。
體驗
# 模組1程式碼
def my_test(a, b):
print(a + b)
# 模組2程式碼
def my_test(a, b):
print(a - b)
# 導⼊模組和調⽤功能程式碼
from my_module1 import my_test
from my_module2 import my_test
# my_test函式是模組2中的函式
my_test(1, 1)
1.3 模組定位順序
當匯入一個模組,Python解析器對模組位置的搜尋順序是:
- 當前目錄
- 如果不在當前目錄,Python則搜尋在shell變數PYTHONPATH下的每個目錄。
- 如果都找不到,Python會察看預設路徑。UNIX下,預設路徑一般為/usr/local/lib/python/模組搜尋路徑儲存在system模組的sys.path變數中。變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。
注意
- 自己的檔名不要和已有模組名重複,否則導致模組功能無法使用
- 使用from 模組名 import 功能 的時候,如果功能名字重複,呼叫到的是最後定義或匯入的功能。
1.4 all
如果一個模組檔案中有 all 變數,當使用 from xxx import * 匯入時,只能匯入這個列表中的元素。
my_module1模組程式碼
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB') 123456789
匯入模組的檔案程式碼
from my_module1 import *
testA()
testB()
二. 包
包將有聯絡的模組組織在一起,即放到同一個資料夾下,並且在這個資料夾建立一個名字為 init.py 檔案,那麼這個資料夾就稱之為包。
2.1 製作包
[New] — [Python Package] — 輸入包名 — [OK] — 新建功能模組(有聯絡的模組)。
注意:新建包後,包內部會自動建立 init.py 檔案,這個檔案控制著包的匯入行為。
2.1.1 快速體驗
- 新建包 mypackage
- 新建包內模組: my_module1 和 my_module2
- 模組內程式碼如下
# my_module1
print(1)
def info_print1():
print('my_module1')
# my_module2
print(2)
def info_print2():
print('my_module2')
2.2 匯入包
2.2.1 方法一
import 包名.模組名
包名.模組名.目標
2.2.1.1 體驗
import my_package.my_module1
my_package.my_module1.info_print1()
2.2.2 方法二
注意:必須在 init.py 檔案中新增 all = [] ,控制允許匯入的模組列表。
from 包名 import *
模組名.目標
123456
123456
123
123
2.2.2.1 體驗
from my_package import *
my_module1.info_print1()