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 該函...