示範檔案
$\glance
$\glance\__init__.py
$\glance\api
$\glance\api\__init__.py
$\glance\api\policy.py
$\glance\api\versions.py
$\glance\cmd
$\glance\cmd\__init__.py
$\glance\cmd\manage.py
$\glance\db
$\glance\db\__init__.py
$\glance\db\models.py
0. 包的匯入操作
import package_name
-直接匯入乙個包,可以直接使用__init__.py的內容
1.1 使用方式:
package_name.func_name
package_name.class_name.func_name()
1.2 此種訪問的內容是:
案例:pkg01,p07.py
import package name as p
2.1 具體用法跟作用方法,跟上面一致
2.2 注意的是此方法預設是對 init.py的內容進行匯入
import package.module
3.1 匯入某乙個具體的模組
3.2 使用方法:
package.module.func_namefrom … import 匯入
from package import module,module2…
此種方法不匯入 'init』的內容
from package import *
匯入指定包的所有內容
1. 包的使用之import
d:\tmp臨時檔案》python test.py # 與 glance 資料夾同級
from models.py: mysql
單獨匯入包名稱時不會匯入包中所有包含的所有子模組,如
#在與glance同級的test1.py中
import glance
glance.cmd.manage.main(
)
執行結果:
attributeerror: module 'glance' has no attribute 'cmd'
解決方法:
#glance/__init__.py
from
.import cmd
#glance/cmd/__init__.py
from
.import manage
再執行:
d:\tmp臨時檔案》python test1.py
from manage.py
2. 包的使用之from … import …
需要注意的是from後import匯入的模組,必須是明確的乙個不能帶點,否則會有語法錯誤,如:from a import b.c是錯誤語法
***3. from glance.api import ****
此處是想從包api中匯入所有,實際上該語句只會匯入包api下__init__.py檔案中定義的名字,我們可以在這個檔案中定義__all___:
#在__init__.py中定義
x=10
deffunc()
:print
('from api.__init.py')
__all__=
['x'
,'func'
,'policy'
]
此時我們在於glance同級的檔案中執行from glance.api import *就匯入__all__中的內容(versions仍然不能匯入)。
4. 絕對匯入和相對匯入
我們的最頂級包glance是寫給別人用的,然後在glance包內部也會有彼此之間互相匯入的需求,這時候就有絕對匯入和相對匯入兩種方式:
絕對匯入:以glance作為起始
相對匯入:用.或者…的方式最為起始(只能在乙個包中使用,不能用於不同目錄內)
例如:我們在glance/api/version.py中想要匯入glance/cmd/manage.py
在glance/api/version.py
#絕對匯入
from glance.cmd import manage
manage.main()
#相對匯入
from …cmd import manage
manage.main()
測試結果:注意一定要在於glance同級的檔案中測試
5. 包以及包所包含的模組都是用來被匯入的,而不是被直接執行的。而環境變數都是以執行檔案為準的
比如我們想在glance/api/versions.py中匯入glance/api/policy.py,這倆模組是在同乙個目錄下,如果直接這麼做
from glance.api import versions
'''執行結果:
importerror: no module named 'policy'
''''''
分析:此時我們匯入versions在versions.py中執行
import policy需要找從sys.path也就是從當前目錄找policy.py,
這必然是找不到的
'''
6. 絕對匯入與相對匯入總結
絕對匯入: 以執行檔案的sys.path為起始點開始匯入,稱之為絕對匯入
優點:執行檔案與被匯入的模組中都可以使用
缺點:所有匯入都是以sys.path為起始點,匯入麻煩
相對匯入:參照當前所在檔案的資料夾為起始開始查詢,稱之為相對匯入
符號:.代表當前所在檔案的檔案加,…代表上一級資料夾,…代表上一級的上一級資料夾
優點:匯入更加簡單
缺點:只能在匯入包中的模組時才能使用
注意:
相對匯入只能用於包內部模組之間的相互匯入,匯入者與被匯入者都必須存在於乙個包內
attempted relative import beyond top-level package # 試圖在頂級包之外使用相對匯入是錯誤的,言外之意,必須在頂級包內使用相對匯入,每增加乙個.代表跳到上一級資料夾,而上一級不應該超出頂級包
每天1分鐘 PYTHON基礎之變數
變數定義 變數即為可以變化的量,由於值儲存在記憶體中,故需要取出該值則需要乙個指標,指向該記憶體位址能夠取出該記憶體中的值,而這個指標就是變數名。以下例子定義了乙個變數 user bin env python3 coding utf 8 name 小白too愛學習 上述 宣告了乙個變數,變數名為 n...
每天1分鐘 PYTHON基礎之函式(函式定義)
函式定義 在python中,函式有五大要點,分別是def 函式名 函式體 引數 返回值,以及兩個英文版符號,分別是括號 括號內為引數 和冒號 def funname para docstring funbody return.1.def 函式關鍵字,沒有它不行。2.funname 函式名 函式的名稱...
每天1分鐘 PYTHON基礎之函式(遞迴函式)
1.定義 在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。2.遞迴函式特性 必須有乙個明確的結束條件 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少 相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備 通常前一次的輸出就作為後一次的輸入 遞迴效率不高,...