Python學習筆記(十六):關于模塊和加載模塊
模塊的相關操作
- Python學習筆記(十六):關于模塊和加載模塊
- 一.匯入模塊
- import
- from...import
- __import __()
- 二.自定義模塊
- 說明檔案
- 三.加載模塊
- 環境變數
- 在 Windows 平臺上設定環境變數
- 在 Linux 上設定環境變數
- 默認的模塊加載路徑
- 匯入模塊的本質
- 四.__all__變數
一.匯入模塊
模塊(Modules)
模塊就是Python程式,任何Python程式都可以作為模塊
代碼的可重用性,只要編程程序中需要用到該模塊中的某個功能(由變數、函式、類實作),直接在程式中匯入該模塊即可使用該功能
封裝特性的結構:
諸多容器,串列、元組、字串、字典等都是對資料的封裝
函式是對 Python 代碼的封裝
類是對方法和屬性的封裝,是對函式和資料的封裝
模塊,可以理解是對代碼更高級的封裝,把能夠實作某一特定功能的代碼撰寫在同一個.py 檔案中,并將其作為一個獨立的模塊,還能有效避免函式名和變數名發生沖突
當程式重復匯入同一個模塊時,Python 只會匯入一次
import
import 模塊名1 [as 別名1], 模塊名2 [as 別名2],…
會匯入指定模塊中的所有成員(包括變數、函式、類等),需要使用模塊中的成員時,需用該模塊名(別名)作為前綴,否則解釋器會報錯
[] 部分,可以使用,也可以省略
sys模塊下的argv變數用于獲取運行程式的命令列引數,argv[0]用于獲取當前 程式的存盤路徑
import sys #匯入sys整個模塊
print(sys.argv[0]) # 用sys模塊內的成員時,必須添加模塊名作為前綴
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
匯入整個模塊時,可以為模塊指定別名
import sys as s # 匯入sys整個模塊,指定別名為s
print(s.argv[0]) # 使用sys模塊別名s作為前綴來訪問模塊中的成員
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
可以一次匯入多個模塊,多個模塊之間用逗號隔開
import sys,os # 匯入sys、os兩個模塊
print(sys.argv[0]) # 使用模塊名作為前綴來訪問模塊中的成員
print(os.sep) # os模塊的sep變數代表平臺上的路徑分隔符
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
\
匯入多個模塊時,也可以為模塊指定別名
import sys as s,os as o # 匯入模塊,并分別為模塊指定別名
print(s.argv[0]) # 使用模塊別名作為前綴來訪問模塊中的成員
print(o.sep)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
\
from…import
from 模塊名 import 成員名1 [as 別名1],成員名2 [as 別名2],…
只會匯入模塊中指定的成員,而不是全部成員,當程式中使用該成員時,無需加任何前綴,直接使用成員名(或別名)
[] 部分,可以使用,也可以省略
用from...import來匯入指定成員
from sys import argv # 匯入sys模塊的argv成員
print(argv[0]) # 直接使用成員名訪問
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
匯入sys模塊中的 argv 成員,可在程式中直接使用 argv 成員,無須使用任何前綴
匯入模塊成員時,為成員指定別名
from sys import argv as v # 匯入sys模塊的argv成員,為其指定別名v
print(v[0]) # 直接使用成員的別名訪問
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
form...import 匯入模塊成員時,可一次匯入多個成員
from sys import argv, winver # 匯入sys模塊的argv,winver成員
print(argv[0]) # 直接使用成員名訪問
print(winver)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
3.4
sys模塊的winver成員記錄了該 Python 的版本號
一次匯入多個模塊成員時,可使用 as 關鍵字為成員指定別名
from sys import argv as v, winver as wv # 匯入sys模塊的成員,并為其指定別名
print(v[0]) # 直接使用成員的別名訪問
print(wv)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
3.4
不推薦使用 from 模塊 import * 匯入模塊所有成員
匯入指定模塊內的所有成員存在潛在的風險,可能會出現同名成員
可通過別名來區分兩個模塊中的同名成員
__import __()
模塊是代碼檔案,要求其檔案名要符合作業系統的命名規則,如果模塊名中出現空格或數字開頭,無法使用 import 引入
如果模塊中包含空格或以數字開頭,需要使用__import__() 內置函式引入模塊
__import__("demo text")
__import__("1demo")
使用import()函式要以字串的方式將模塊名引入,否則會報SyntaxError錯誤
二.自定義模塊
定義簡單的模塊(撰寫在 demo.py 檔案中)
name = "youchanwill"
add = "you.com"
print(name,add)
def say():
print("自定義模塊")
class test:
def __init__(self,name,add):
self.name = name
self.add = add
def say(self):
print(self.name,self.add)
為了檢驗模板中代碼的正確性,需要為其設計一段測驗代碼
say()
test1 = test("you","you.net")
test1.say()
在同一檔案夾下新建一個test.py檔案,使用 import 陳述句匯入 demo.py
import demo #用import 陳述句匯入時,只需要使用該模板檔案的名稱
youchanwill you.com
自定義模塊 #測驗代碼也被執行
you you.net
其它程式以引入的方式執行模板檔案,測驗代碼不應該被執行,可用__name__ 變數做修改
當直接運行一個模塊時,__name__變數的值為__main__,而模塊被匯入其他程式中并運行該程式時,處于模塊中的__name__變數的值就變成了模塊名
可在呼叫測驗函式時增加判斷,當 __name__ =='__main__' 時才呼叫測驗函式
修改 demo.py 模板檔案中的測驗代碼:
if __name__ == '__main__':
say()
test1 = test("you","you.net")
test1.say()
修改后運行 test.py 檔案時
import demo
youchanwill you.com
執行的是模板檔案中的輸出陳述句,測驗代碼并未執行
說明檔案
自定義模塊添加說明檔案,和函式或類的添加方法相同,在模塊開頭的位置定義一個字串
可以通過模板的 __doc__ 屬性,來訪問模板的說明檔案
import demo
print(demo.__doc__)
youchanwill you.com
這是說明檔案
三.加載模塊
環境變數
根據PYTHONPATH環境變數的值來確定到哪里去加載模塊
PYTHONPATH環境變數的值是多個路徑的集合,會依次搜索PYTHONPATH 環境變數所指定的多個路徑,從中找到程式想要加載的模塊
在 Windows 平臺上設定環境變數
右擊桌面上的“計算機”圖示,單擊“屬性”選單項,系統顯示“控制面板\所有控制面板項\系統”視窗,單擊該視窗左邊欄中的“高級系統設定”鏈接,出現“系統屬性”對話框

單擊“高級” Tab 頁中的“環境變數”,對于當前用戶而言,設定用戶變數和系統變數的效果大致相同,系統變數的路徑排在用戶變數的路徑之前

在“變數名”內輸入 PYTHONPATH,表明將要建立 的環境變數;在“變數值”內輸入 .;d:\python_ module,就是該環境變數的值,該值包含兩條路徑
第一條路徑為一個點(.),代表當前路徑,表明當運行 Python 程式時,總能從當前路徑加載模塊
第二條路徑為 d:\python_ module,表明當運行 Python 程式時,總能從 d:\python_ module 加載模塊
成功設定了環境變數后,只要把定義的模塊放在與當前運行程式相同的路徑(或d:\python_ module 路徑),該模塊就能被成功加載
在 Linux 上設定環境變數
啟動 Linux 的命令列界面,在 home 路徑下輸入:
ls - a
Linux 平臺的環境變數通過 .bash_profile 檔案設定,在該檔案中添加 PYTHONPATH 環境變數
PYTHONPATH=.:/home/you/python_module #you是系統的登錄名
Linux 多個路徑之間以冒號(:)作為分隔符
完成變數值的設定后,在 .bash_profile 檔案的最后添加匯出 PYTHONPATH 變數的陳述句
export PYTHONPATH
運行該檔案,使在檔案中設定的 PYTHONPATH 變數值生效
可選擇重新登錄Linux 平臺,或輸入source .bash_profile
成功設定了環境變數后,只要把定義的模塊放在與當前運行程式相同的路徑(或/home/yeeku/python_module 路徑),該模塊就能被成功加載
默認的模塊加載路徑
安裝通用性模塊,這種模塊應該直接安裝在 Python 內部,可借助Python默認的模塊加載路徑
通常情況下,應將Python的擴展模塊添加在 lib\site-packages 路徑下,專門用于存放擴展模塊和包
將之前的demo.py檔案復制在 lib\site-packages 路徑下
'''
這是說明檔案
'''
name = "youchanwill"
add = "you.com"
print(name,add)
def say():
print("自定義模塊")
class test:
def __init__(self,name,add):
self.name = name
self.add = add
def say(self):
print(self.name,self.add)
if __name__ == '__main__':
say()
test1 = test("you","you.net")
test1.say()
可直接在Python互動式解釋器中測驗該模塊
>>> import demo
youchanwill you.com
>>> print(demo.__doc__)
這是說明檔案
>>>
第一行代碼用于匯入demo模塊;第二行代碼用于查看demo模塊的檔案,輸出該模塊開始定義的檔案內容
匯入模塊的本質
import demo 匯入模塊的本質是將 demo.py 中的全部代碼加載到記憶體并執行
將整個模塊內容賦值給與模塊同名的變數,該變數的型別是 module,在該模塊中定義的所有程式單元都相當于該 module 物件的成員
from demo import name 匯入模塊中成員的本質是將 demo.py 中的全部代碼加載到記憶體并執行
只匯入指定變數、函式等成員單元,不會將整個模塊匯入
在匯入模塊后,在模塊檔案所在目錄下看到一個名為“__pycache__”的檔案夾
Python 為每個模塊都生成一個 *.cpython-36.pyc 檔案,該檔案是為模塊編譯生成的位元組碼,用于提升該模塊的運行效率
四.__all__變數
向檔案匯入某個模塊時,匯入的是該模塊中那些名稱不以下劃線(單下劃線、雙下劃線)開頭的變數、函式和類
如果不想模塊檔案中的某個成員被引入到其它檔案中使用,可以在其名稱前添加下劃線
新建demo.py檔案
def test1():
print("you")
def test2():
print("chan")
def test3():
print("will")
在新建的test.py檔案中匯入
from demo import *
test1()
test2()
test3()
you
chan
will
如果 demo.py 模塊中的 test1() 函式不想讓其它檔案引入,只需將其名稱改為 _test1() 或者 __test1()
def _test1():
print("you")
NameError: name 'test1' is not defined
__all__ 變數,該變數的值是一個串列,存盤的是當前模塊中一些成員(變數、函式或者類)的名稱
通過在模塊檔案中設定 __all__ 變數,當其它檔案以“from 模塊名 import *”的形式匯入該模塊時,該檔案中只能使用 __all__ 串列中指定的成員
只有以“from 模塊名 import *”形式匯入的模塊,當該模塊設有 __all__ 變數時,只能匯入該變數指定的成員,未指定的成員無法匯入
def test1():
print("you")
def test2():
print("chan")
def test3():
print("will")
__all__ = ["test1","test2"]
from demo import *
test1()
test2()
test3()
you
chan
NameError: name 'test3' is not defined
__all__ 變數僅限于在其它檔案中以“from 模塊名 import *”的方式引入
import 模塊名 的形式匯入模塊,可以通過模塊名前綴(別名)來呼叫模塊內的所有成員(除了以下劃線開頭命名的成員),__all__變數的設定無效
from 模塊名 import 成員 匯入指定成員,__all__變數的設定無用
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260591.html
標籤:python
下一篇:Python05--函式
