包
包是乙個分層次的檔案目錄結構,它定義了乙個由模組及子包,和子包下的子包等組成的 python 的應用環境。
簡單來說,包就是資料夾,但該資料夾下必須存在 __init__.py 檔案, 該檔案的內容可以為空。__init__.py用於標識當前資料夾是乙個包
1、包中的__init__.py
__init__.py控制著包的匯入行為
建立包後,包裡自動生成乙個__init__.py在python3中沒有意義,刪掉也沒問題
在python2 中是有作用的,若在python2中不定義乙個__init__.py會導致其他模組不能使用該包中的模組
1.1、可以在__init__.py檔案裡新增內容,當匯入此包中的模組時,__init__.py檔案**就會執行
1.2、若包裡沒有__init__.py檔案,則其他模組匯入此包(說的是只匯入包,不是模組,即在其他包的模組檔案中只匯入包名(不導模組名也可以使用模組))時:
python2匯入失敗;python3可以成功匯入,但是使用包中模組時會報錯
接下來可以在包裡建立乙個__init__.py檔案,建立後:python2匯入成功,但模組不能使用;python3可以成功匯入,但模組不能使用(__init__.py在python3中沒有意義,刪掉也沒問題)
第三步,若要使用包中的模組,python2中需要在__init__.py檔案裡寫入匯入的模組名:import 模組名;python3中用python2的方式不能解決問題,需要這樣:from . import 模組名(.點表示的是當前路徑)
2、使用包裡的模組
包裡的模組匯入:import 包名.模組名 as 別名
包名:package_test,包裡檔案:__init__.py(空) 、test_1.py
test_1.py內容
def func():print(
'測試包 test_1
')
在另外的包有個test.py模組,在此模組呼叫package_test/test_1.py
import package_test.test_1 astest
test.func()
*********************************************=執行結果:
測試包 test_1
3、__all__
在__init__.py
檔案中,定義乙個__all__
變數,它控制著 from 包名 import *時匯入的模組
__all__也屬於模組中的變數,如果乙個模組用了__all__ = ['變數1','變數2'.....],且另外乙個模組匯入該模組的方式是:from 包名 import *
那麼只有在__all__的列表中的字串(變數)才可以在其他模組使用
例:test.py
# 條件 其他模組必須是通過from 模組名 import *方式匯入的模組__all__ = ["
name
",'add2num']
name = "
加法運算
"def add2num(a, b):
return a +b
def delnum(a,b):
return a - b
ceshi.py
from test import *# 可以正常呼叫print(name)
print(add2num(
33,8
))# 呼叫delnum函式失敗
f = delnum(33,2
)print(f)
***********************************===
報錯資訊:nameerror: name 'test' is not defined
Python3之基礎語法
1 編碼 預設情況下,python3原始碼檔案以utf 8編碼,所有字串是unicode字串 2 識別符號 3 保留字 python保留字即關鍵字,不能用於任何識別符號名稱。python標準庫提供了keyword模組,輸出當前版本的所有關鍵字 import keyword keyword.kwlis...
python3基礎之字典
字典是另一種可變容器模型,且可儲存任意型別物件。字典的每個鍵值 key value 對用冒號 分割,每個對之間用逗號 分割,整個字典包括在花括號 中 格式如下所示 d 鍵必須是唯一不可變的 數字 字串 元組 但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。乙個簡單的字典例項...
python3的樣子 python3 基礎
第一周 語言基礎 一 python是一門什麼樣的語言?解釋型動態型別強型別定義語言。二 python2和3的主要區別?1 python3裡可以直接預設寫中文,然後python2裡是不能直接寫的。2 python2裡print不用加括號,可直接寫字串,也可以加 python3裡printi必須要加括號...