python 基礎 6 模組與包

2021-10-17 03:43:14 字數 3318 閱讀 9412

參考: 部落格教學

什麼是模組?

模組是一些列功能的集合體

常見的模組形式:(自定義模式、第三方模組、內建模組)

1 乙個module.py就是乙個模組,檔名是module.py,而模組名是module

2 把一系列模組組織到一起的資料夾(注:資料夾下有乙個__init__.py檔案,該資料夾稱之為包)

3 已被編譯為共享庫或dll的c或c+

+擴充套件

4 使用c編寫並鏈結到python直譯器的內建模組

為什麼要用模組

#1、從檔案級別組織程式,更方便管理

隨著程式的發展,功能越來越多,為了方便管理,我們通常將程式分成乙個個的檔案,這樣做程式的結構更清晰,方便管理。這時我們不僅僅可以把這些檔案當做指令碼去執行,還可以把他們當做模組來匯入到其他的模組中,實現了功能的重複利用

#2、拿來主義,提公升開發效率

#ps:

如果你退出python直譯器然後重新進入,那麼你之前定義的函式或者變數都將丟失,因此我們通常將程式寫到檔案中以便永久儲存下來,需要時就通過python test.py方式去執行,此時test.py被稱為指令碼script。

如何用模組

匯入的方式有兩種

import 模組名

from model import 模組名

import 首次匯入模組發生的3件事

1、以模組為準建立了乙個模組的命名空間

2、執行模組對應的檔案,將執行過程中產生的名字都丟到模組的命名空間

當執行import xx.py, 其實就是執行 xx.py 模組命名空間中的記憶體空間位址

3、在當前執行檔案中拿到模組名

from model import names 首次匯入模組發生的3件事

1、以模組為準建立了乙個模組的命名空間

2、執行模組對應的檔案,將執行過程中產生的名字都丟到模組的命名空間

3、在當前執行檔案的命名空間中拿到乙個名字,該名字直接指向模組中的某乙個名字

優點: 不需要加模組名.名字 能直接執行, 不用加字首,**更為精簡

缺點: 容易與當前執行檔案中命名空間中的名字衝突

# 相同點:

1、 都會執行模組對應的檔案,都會產生模組的命名空間

2、 呼叫功能時,需要跑到定義時尋找作用域關係,與呼叫位置無關

# 不同點:

1、 from

import 不需要加字首,import 需要加字首

from xx import *

可以使用__all__來控制*

(用來發布新版本),使用__all__這就能匯入列表中規定的兩個名字

__all__[

'模組名1'

,'模組名2'

] 控制使用時模組過多的問題,

說明

# 乙個py檔案就是乙個模組,在匯入時必須從某乙個資料夾下該到該py檔案,模組的搜尋路徑指的就是在匯入模組時需要檢索的資料夾們
匯入模組順序

模組的查詢順序是:記憶體中已經載入的模組-

>內建模組-

>sys.path路徑中包含的模組

強調: sys.path的第乙個值是當前執行檔案所在的資料夾

sys.path從以下位置初始化

1 執行檔案所在的當前目錄

2 ptyhonpath(包含一系列目錄名,與shell變數path語法一樣)

3 依賴安裝時預設指定的

當執行檔案確認之後,查詢的模組就會以執行檔案所在的檔案為準

#編寫好的乙個python檔案可以有兩種用途:

一:指令碼,乙個檔案就是整個程式,用來被執行

二:模組,檔案中存放著一堆功能,用來被匯入使用

#python為我們內建了全域性變數__name__,

當檔案被當做指令碼執行時:__name__ 等於'__main__'

當檔案被當做模組匯入時:__name__等於模組名

#作用:用來控制.py檔案在不同的應用場景下執行不同的邏輯

if __name__ ==

'__main__'

:

什麼是包

包是一種通過使用『.模組名』來組織python模組命名空間的方式。

#具體的:包就是乙個包含有__init__.py檔案的資料夾,所以其實我們建立包的目的就是為了用資料夾將檔案/模組組織起來

#需要強調的是:

1. 在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯

2. 建立包的目的不是為了執行,而是被匯入使用,記住,包只是模組的一種形式而已,包的本質就是一種模組

如何用包

# 匯入包就是導包下的__init__.py檔案

1、包內的所有檔案都是被匯入使用的,而不是被直接執行

2、包內部模組之間的匯入可以使用絕對匯入 (以包的根目錄為基準) 與相對匯入(與當前被匯入的模組所在的目錄為基準)

推薦使用相對匯入

3、相對匯入只能用於模組的匯入,當檔案是執行檔案時,無法在該檔案內使用相對匯入

只有在檔案時被當作模組匯入時,該檔案內才能使用相對匯入

4、凡是在匯入時帶點的. 點的左邊都必須是乙個包

注意事項

# 1.關於包相關的匯入語句也分為import和from ... import ...兩種,但是無論哪種,無論在什麼位置,在匯入時都必須遵循乙個原則:凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。但對於匯入後,在使用時就沒有這種限制了,點的左邊可以是包,模組,函式,類(它們都可以用點的方式呼叫自己的屬性)。

# 2、import匯入檔案時,產生命名空間中的名字**於檔案,import 包,產生的命名空間的名字同樣**於檔案,即包下的__init__.py,匯入包本質就是在匯入該檔案

# 3、包a和包b下有同名模組也不會衝突,如a.a與b.a來自倆個命名空間

python基礎 模組與包(一)

模組與包 python中的py檔案我們拿來呼叫的為之模組 主要有內建模組 python直譯器自帶 第三方模組 別的開發者開發的 自定義模組。目前我們學習的是內建模組與第三方模組。通過import來匯入模組。一.time模組 time.函式名稱 1 時間戳 timestamp 通常來說,時間戳表示的是...

python基礎 模組 包

一 模組 1.模組是程式 任何python程式都可以作為模組匯入。程式的儲存也很重要,如果想把程式儲存在c python windows 目錄下,需要告訴直譯器在 尋找模組了。import sys 2.匯入模組 匯入模組只需要一次。import hello 在模組中定義函式 hello python...

python模組與包

路徑修改 命令列怎麼檢視路徑,修改路徑 列印當前搜尋路徑 import sys sys.path sys.path import os os.getcwd os.chdir c www 模組實現構建模組的初衷就是將一些同類的東西進行打包,以免汙染全域性空間,在python的模組裡,對需要隱藏的屬性和...