一、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...