Python之模組詳細梳理 五

2021-10-24 14:52:38 字數 2071 閱讀 3358

python包是一種特殊的資料夾,用來存放多個相互關聯的模組檔案和資源檔案,該資料夾下必須有__init__.py檔案。python首次匯入包時會自動執行__init__.py檔案。若沒有這個檔案會被視為資料夾,有這個檔案才會被視為包。

資料夾jihe下有3個檔案,內容如下:

__init__.py檔案:

from jihe import mianji  # 匯入mianji.py模組

from jihe import tiji # 匯入tiji.py模組

__all__ = ['mianji', 'tiji'] # 定義from jihe import *可使用的模組名

mianji.py檔案:

'''

計算面積

'''def changfx(a, b):

return a*b

def yuanx(r):

return 3.14159*r*r

def sanjx(a, b):

return a*b/2

tiji.py

'''

計算體積

'''def changft(a, b, c):

return a*b*c

def zhengft(a):

return a**3

test1.py檔案(使用from jihe import *方式,可使用的函式會受__all__限制):

from jihe import *

print(mianji.changfx(3,5))

print(mianji.sanjx(2,4))

print(mianji.yuanx(5))

print(tiji.changft(2,3,4))

print(tiji.zhengft(3))

out:

154.0

78.53975

2427

test2.py檔案(使用import jihe方式,可使用的函式不受__all__限制):

import jihe

print(jihe.mianji.changfx(3,5))

print(jihe.mianji.sanjx(2,4))

print(jihe.mianji.yuanx(5))

print(jihe.tiji.changft(2,3,4))

print(jihe.tiji.zhengft(3))

out:

154.0

78.53975

2427

from xx import *的方式使用包內資源時省略包名寫「模組名.成員名」即可,但有命名衝突的風險。

import xx的方式使用包內資源時要寫「包名.模組名.成員名」才行,但不會有命名衝突的風險。

以下寫乙個定義包的另類方法,拓展思路,給大家參考。

還是沿用前面的案例,但__init__.py檔案重新定義如下:

from .mianji import *

from .tiji import *

__all__ = ['changfx', 'yuanx','sanjx','changft','zhengft']

test3.py檔案(使用from jihe import *方式,可使用的函式會受__all__限制):

from jihe import *

print(changfx(3,5))

print(sanjx(2,4))

print(yuanx(5))

print(changft(2,3,4))

print(zhengft(3))

out:

154.0

78.53975

2427

__init__.py檔案使用from xx import *方式,test3也使用from xx import *,可以將jihe包內所有成員當成本地成員使用。優點是使用包內資源時只需要寫成員名即可,缺點是命名衝突的概率大增。

Python之模組詳細梳理 三

預設情況下,所有的成員都會被匯入。但可以修改 all 變數控制哪些成員可以被匯入。該變數是字串列表 或元組 內部元素是可被匯入的成員名。示例請看下圖 test1模組中有name age height三個成員,all 變數儲存了這三個成員名。test2模組用from test1 import 匯入te...

python模組 Python之模組詳細梳理 三

預設情況下,所有的成員都會被匯入。但可以修改 all 變數控制哪些成員可以被匯入。該變數是字串列表 或元組 內部元素是可被匯入的成員名。示例請看下圖 test1模組中有name age height三個成員,all 變數儲存了這三個成員名。test2模組用from test1 import 匯入te...

Python基礎之getpass模組詳細介紹

本文主要給大家介紹了關於python中getpass模組的相關內容,分享出來供www.cppcns.com大家參考學習,話不多說了,來一起看看詳細的介紹 getpass模組提供了平台無關的在命令列下輸入密碼的方法 該模組主要提供 備註 上面為密碼顯示時丟擲的報警 getpass.getuser 該函...