21 ,模組與包的使用

2022-09-06 13:03:18 字數 3323 閱讀 9258

一、python檔案的使用途徑

1.1、乙個python檔案的兩種用途

1.被當成檔案使用

2.被當成模組使用

1.2、兩種使用途徑的區別

1.2.1、匯入模組之後,模組裡面的名字和和使用python檔案是一樣的,區別在於模組的裡面的名字只作用於模組本身,儲存在模組設定的命名空間中

無論是檢視還是修改操作都是模組本身,不影響呼叫位置。而當檔案使用的時候是使用全域性的變數。  

1.2.2、每個py檔案都內建了__name__變數,該變數在py檔案被當做指令碼執行時賦值為「__main__」,在py檔案被當做模組匯入時賦值為模組名

作為模組foo.py的開發者,可以在檔案末尾基於__name__在不同應用場景下值的不同來控制檔案執行不同的邏輯

if

__name__ == '

__main__':

foo.py被當做指令碼執行時執行的**

else

: foo.py被當做模組匯入時執行的**

二、模組的匯入

2.1、模組匯入的要求

import匯入模組的時候要求加字首"模組."

優點:不會和當前命名空間內的名字衝突

缺點:加字首比較麻煩

2.2、在模組匯入時發生的事      form 。。。 import。。。

1.產生乙個模組的命名空間

2.執行模組,將產生的名字放入命名空間中

3.將模組的命名空間裡面的名字新增到檔案所在的命名空間中

2.3、模組二次匯入

當模組被再次匯入的時候,由於第一次匯入的命名空間已經在記憶體中,所以不會再執行模組檔案的程式**,而是從記憶體中繫結引用

2.4、import。。。和form。。。importde。。。的區別

import。。。匯入的是模組內的所有名字

form。。。importde。。。匯入的是模組內,某個名字

三、模組搜尋的優先順序

優先順序:記憶體===》內建模組===》sys。path

sys。path的值為列表,存放著各種資料夾的路徑,當記憶體和內建模組中沒有時,將會通過sys。path去硬碟中按照順序尋找。

其中第乙個檔案是當前執行檔案的所在資料夾

sys。modules 的值為字典,存放的是記憶體中已經有的模組,key對應的是模組名,value對應的是絕對路徑

四、迴圈匯入問題

問題:由於乙個模組在執行的過程中,匯入第二個模組,而第二個模組在未完全執行完前又需要匯入第乙個模組,這就會導致迴圈匯入問題

解決方案:1.將匯入語句放到最後,保證在匯入時,所有的名字已經加載入記憶體

2.將匯入語句放到函式中,只有在函式呼叫的時候才會執行

五、編寫乙個規範的模板

#

!/usr/bin/env python #通常只在類unix環境有效,作用是可以使用指令碼名來執行,而無需直接呼叫直譯器。

"the module is used to..."#

模組的文件描述

import sys #

匯入模組

x=1 #

定義全域性變數,如果非必須,則最好使用區域性變數,這樣可以提高**的易維護性,並且可以節省記憶體提高效能

class foo: #

定義類,並寫好類的注釋

'class foo is used to...

'pass

def test(): #

定義函式,並寫好函式的注釋

'function test is used to…

'pass

if__name__ == '

__main__

': #

主程式 test() #

在被當做指令碼執行時,執行此處的**

六、包的使用

6.1、包的定義

包就是乙個含有__init__檔案的資料夾

6.2、為什麼要有包

包的本質是一種模組,包是用來當做模組在使用

6.3、包在使用時發生的事

1.產生乙個命名空間

2.執行包下的__init__。py檔案,將執行中的名字全部匯入到命名空間中

3.在當前執行的檔案中遇到的名字,將會直接指向步驟1中的命名空間

6.4、強調事項

1.包的匯入分為import和from。。。import兩種,但不管是哪一種,再匯入時都要準守:凡是在匯入時帶點的,左邊必須是乙個包。使用時不限制

2.兩個包之間有同乙個包也不會衝突,名字分別會在兩個命名空間中

3.import匯入檔案時,產生的命名空間中的名字**於檔案,

import包產生的命名空間的名字同樣來自檔案,即包下的__init__.py,匯入包的本質就是在匯入檔案

七、包的匯入與絕對匯入

包的匯入分為絕對匯入和相對匯入

7.1、絕對匯入

絕對匯入:以頂級包作為起始

#

pool包的__init__.py檔案

from pool.subpool import f1 #

必須從點選包開始

f1()

#使用

7.2、包的相對匯入

相對匯入:。代表當前檔案所在位置     

#

pool下的__init__.py

from . import versions

7.3、import的絕對匯入

可以在匯入過程中不斷的加。匯入過程中同樣會依次執行包下的__init__.py,只是基於import匯入的結果,使用時必須加上該字首

#

操作pool下的__init__.py,保證pool.futures

from . import futures #

或from pool import futures

#操作futrues下的__init__.py,保證pool.futures.process

from . import process #

或from pool.futures import process

7.4、注意事項:form 。import是可以的,但是form       import。。是不可以的

在包內模組之間的匯入推薦使用相對匯入,但是相對匯入只能包模組內,禁止在不同目錄下使用包

無論是import還是 form   import,凡是帶點的左邊必須是包,否則錯誤。

from pool import futures.process #

語法錯誤

from pool.futures import process #

語法正確

python 包 模組的概念 匯入與使用

how to define 模組 how to 使用模組 模組直接匯入 import module name module name.function.name module name.class name 若模組名稱直接以數字開頭,需要借助importlibimport importlib 匯入了...

python的包與模組

這是一篇python小白關於包與模組的粗淺認知,用以加深理解。如有錯誤,請各位前輩多多指教 什麼是包與模組 在python中,我們可以把包與模組理解為資料夾與檔案,但僅僅是這樣理解,包與資料夾的區別就是包下會有乙個 init py 檔案 稍後我們對其進行一段解釋。而模組中還包括有 類,變數,函式等元...

python學習day21 模組和包

序列化模組 資料型別轉化成字串的過程 為了方便儲存和網路傳輸 三種模式 json dumps loads dump 和檔案有關 load 不能load多次 import json data json dic json.dumps data,sort keys true,indent 4,separa...