python第十六天

2022-07-30 07:30:12 字數 3135 閱讀 2271

一、包

1、什麼是包?

一系列模組的集合

2、有什麼用?

包通過資料夾來管理一系列功能相近的模組

3、包重點?

包中一定有乙個專門用來管理包中所有模組的檔案   __init__

4、什麼是包名?

包名是存放一系列模組的資料夾名字

5、包名有什麼用

包名(包物件)存放的是管理模組的那個檔案的位址,指向其全域性命名空間。

二、模組載入順序

1、模組的載入順序?

記憶體》內建》sys.path(自定義模組)

2、第一次匯入模組順序?

記憶體》內建》自定義  最終在自定義中找到完成匯入,並在記憶體中快取模組的記憶體位址

3、再次匯入模組順序?

從記憶體中就了可以直接找到,即時當前檔案為刪除狀態,記憶體中的位址仍可以被引用。

import sys

sys.path  環境變數:存放檔案路徑列表

#重點:預設列表中第乙個元素就是當前被執行檔案所在目錄

#可以自定義往sys.path中新增路徑

sys.path.insert(0,r『想匯入的模組的絕對路徑』)  #新增到指定索引,索引就決定了模組查詢的順序

三、迴圈匯入

1.迴圈匯入導致的問題?

-- 匯入模組是要使用模組中的變數

-- 正常邏輯都是在檔案最上方先完成對模組的匯入,再在下方定義自身模組變數,以及使用匯入的模組中的變數

-- 由於匯入模組的特殊機制,第一次匯入模組會編譯執行匯入的模組,也就是會進入模組逐句執行模組內容,再次匯入只是使用記憶體中的名字

-- 就會出現下面的情況,m2在使用m1中的變數x,但變數x卻並未產生,這就出現了迴圈匯入問題

m1.py檔案

import m2

x = 10

print(m2.y)

m2.py檔案

import m1

y = 10

print(m2.x)

# 解決迴圈匯入問題:

延後匯入,一旦產生對方要使用的名字再去完成匯入對方。

1、from 匯入馬上回使用名字,極容易出現錯誤,建議迴圈匯入的情況下,使用import匯入

2、先提前產生名字,再匯入模組

3、在匯入邏輯放在函式中,將匯入的邏輯延後到函式的呼叫,呼叫在生產名字後即可。

重點:問題:from導包極容易出現迴圈匯入問題

解決:建議from匯入方式改用import匯入方式

四、導包完成的三項事

1、編譯執行包中的__init__.py檔案,會在包__pycache__中建立對應的pyc字尾的檔案

2、產生__init__.py檔案的全域性命名空間,用來存放__init__出現的名字。

3、產生包名指向__init__.py檔案的全域性命名空間 | 指定變數名指向包中指定名字

總結:包名為資料夾名,命名空間是__init__.py產生的。

五、使用包中模組中的名字:採用import匯入

建議:在包__init__檔案中不建議:

1、不建議使用import匯入模組

2、不建議使用as起別名

在使用檔案中

直接在要使用的資料夾中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

# 注:有相對匯入.語法的檔案都不能自執行

Python 第十六天

魔法方法總是被雙下劃線包圍 例如 init 注 魔法方法第乙個引數為cls 類方法 或者self 例項方法 其中 cls 代表乙個類名稱 self 代表乙個例項物件的名稱 基本方法 init self 構造器,當乙個例項被建立的時候呼叫的初始化方法 new cls 是在乙個物件例項化的時候所呼叫的第...

學習python 第十六天

流 i o 一 編碼 編碼明文 暗文 明文 暗文 解碼計算機只認識010101 ascii 0 127 ansi ascii加上拉丁文 gb2312 ascii加上7000多個漢字 前八位和後八位 127 gbk gb2312加上2萬多個漢字 前八位 127 unicode 國際通用 utf 8 推...

寒假第十六天

abs x 返回數字的絕對值,如abs 10 返回 10 ceil x 返回數字的上入整數,如math.ceil 4.1 返回 5 cmp x,y 如果 x y 返回 1,如果 x y 返回 0,如果 x y 返回 1 exp x 返回e的x次冪 ex 如math.exp 1 返回2.7182818...