基石爲勤能補拙的迷宮之旅——第十六天(包)

一、包的認識

包通過文件夾來管理一系列功能相近的模塊。
包:一系列模塊的集合體,包中一定有一個專門用來管理包中所有模塊的文件__init__.py
包名:存放一系列模塊的文件夾名字,存放的是管理模塊的那個文件的地址,指向其全局名稱空間

二、包的使用

(一)、包的導入

     import 本質是通過查找環境變量(sys.path)中的絕對路徑來完成導入

導包完成的三件事

  1. 編譯執行包中的__init__.py文件,會在包中__pycache__創建對應的pyc文件
  2. 產生__init__.py文件的全局名稱空間,用來存放__init__出現的名字
  3. 產生包名指向__init__.py文件的全局名稱空間 | 指定變量名指向包中指定名字

注:包名爲文件夾名,名稱空間是__init__.py產生的

使用包中模塊中的名字

文件結構:
module文件夾
	-- __init__.py
	-- m1.py

test.py文件
import module
# 在該文件中使用包

1.包名.X ——就是問包下的__init__.py文件要一個名字,__init__.py文件中產生的普通名字可以直接使用

__init__.py
x = 10

test.py
print(module.x)

2.包下的模塊,要通過 包名.模塊名 間接使用,直接import 模塊名(那個py文件)是錯誤的
①在__init__.py文件中import 模塊名

m1.py
num = 10

__init__.py
import module.m1

test.py
print(module.m1.num)

②from 包名(執行文件所在文件夾下能找到的情況下)import 模塊名

(二)、使用包中模塊中的名字:採用import導入

注意點:
1.在包__init__.py中不建議使用import導入
2、在包__init__.py中不建議使用as起別名
總結:不建議__init__.py中採用import管理名字 ==> 空着不寫

在使用文件中
直接在要使用的文件中用import一層層找到你想要的名字
import 包名.文件名 as 別名

起完別名,原名不可以再使用
原名:包名.文件名 => 包名.文件名.變量名
別名:別名 => 別名.變量名

(三)、包中使用import導入:絕對導入

在包的__init__文件中

import 模塊名 # 問題:所屬包不在環境變量,報錯
import 包名.模塊名 # 問題:包所屬文件夾不在文件變量,報錯
import 包名.模塊名 as 別名 # 在外界:包名.模塊名 | 包名.別名 都可以訪問
import 包名.模塊名.名字 # 問題:導包語句.語法左側必須全部是包(文件夾)

外界

import 包名
包名.名字 # 訪問的是__init__中的名字
包名.模塊 # 訪問的模塊這個地址
包名.模塊.名字 # 訪問的模塊中的名字

import 包名.模塊
包名.模塊 # 訪問的模塊這個地址
包名.模塊.名字 # 訪問的模塊中的名字

from 包名 import 模塊
模塊 # 訪問的模塊這個地址
模塊.名字 # 訪問的模塊中的名字

from 包名.模塊 import 名字
名字 # 訪問的模塊中的名字

(四)、包中使用from導入:相對導入

沒有子包

‘’’ 1)
pk包
init.py
– 名字 a = 10
pkm.py
– 名字 b = 20

在外界
import pk
pk.a 訪問a
pk.b 訪問b

init管理文件
a不需要操作
from .pkm import b

‘’’

有子包

1)
pk包
	-- __init__.py
	sub子包
		-- __init__.py
			名字 x = 10
		-- subm.py
			名字 y = 10
	
在外界
import pk
pk.x 訪問x
pk.y 訪問y

在pk的init管理文件
from .sub import x
from .sub.subm import y



2)
pk包
	-- __init__.py
	sub子包
		-- __init__.py
			名字 x = 10
		-- subm.py
			名字 y = 10
	
在外界
import pk
pk.sub.x 訪問x
pk.sub.y 訪問y

在pk的init管理文件:要產生sub名字
from . import sub  => pk.sub

在sub的init管理文件:要產生x,y名字
x不需要操作  => pk.sub.x
from .subm import y  => pk.sub.y

注:有相對導入.語法的文件都不能自執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章