系統模塊 sys
此模塊都是運行時系統的信息
文檔參見:
pbase/python_base_docs_html/系統模塊sys.html
自定義模塊
示例見:
mymod.py # 自定義模塊
test_mymod.py # 導入並測試模塊
import 語句搜索模塊的路徑順序
1. 搜索程序運行時的路徑(當前路徑)
2. sys.path 提供的路徑
3. 搜索內置模塊
模塊的加載過程:
在模塊導入時,模塊所有語句會執行
如果一個模塊已經被導入,則再次導入時不會重新執行模塊內的語句
模塊的重新加載
import mymod
import imp
imp.reload(mymod) # 在運行時重新加載mymod 模塊
模塊被導入和執行的過程:
1. 先搜索相關路徑找模塊(.py文件)
2. 判斷是否有此模塊對應的.py文件,如果.pyc文件比.py文件新,則直接加載.pyc文件
3. 否則用模塊.py 文件生成.pyc並加載執行
pyc模塊的編譯 compile
編譯 解釋執行
mymod.py -----> mymod.pyc -------> python3
模塊的文檔字符串
模塊內第一個沒有賦值給任何變量的字符串爲文檔字符串
模塊的__doc__屬性:
用於綁定模塊文檔字符串
__file__ 屬性
綁定模塊對應的文件路徑
__name__ 屬性
__name__屬性用來記錄模塊的自身的名字
作用:
1. 記錄模塊名
2. 判斷是否爲主模塊
說明:
1. 當此模塊作爲主模塊(也就是第一個運行的模塊)運行時,__name__綁定'__main__'
2. 當此模塊不是主模塊時,__name__綁定模塊名(文件名去掉.py後綴)
模塊的__all__列表
模塊中的 __all__ 列表是一個用來存放可導出屬性的字符串列表
作用:
限定當用from xxx import * 語句導入時,只導入 __all__ 列表內的屬性
示例見:
mymod4.py
模塊的隱藏屬性
模塊中以'_' 開頭的屬性,在from xxx import * 導入時將不被導入,通常稱這些屬性爲隱藏屬性
隨機模塊 random
作用:
用於模擬或生成隨機輸出的模塊
文檔參見:
python_base_docs_html/隨機模塊random.html
練習:
猜數字遊戲:
隨機生成一個0~100的整數,用變量x綁定
讓用戶輸入一個數y,輸出猜數字的結果.
1) 如果y等於x,則提示"恭喜您猜對了!", 退出程序
2) 如果y大於x,同提示"您猜大了"
3) 如果y小於x,同提示"您猜小了"
讓用戶循環輸入,直到猜對爲止,同時顯示用戶猜數字的次數後退出程序
包(模塊包) package
包是將模塊以文件夾的組織形式進行分組管理的方法
作用:
將一系列模塊進行分類管理,有利於防止訪問命名衝突
可以在需要時加載一個或部分模塊,而不是全部模塊
包示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
powerpoint.py
創建命令:
mkdir mypack
cd mypack
touch __init__.py menu.py
mkdir games office
cd games
touch __init__.py contra.py supermario.py tanks.py
cd ../office
touch __init__.py excel.py word.py powerpoint.py
__init__.py 文件
__init__.py 是常規包內必須存在的文件
__init__.py 會在包加載時被自動調用
作用:
編寫此包的內容
在內部填寫包的文檔字符串
包的導入語法:
# 同模塊的導入規則相同
import 包名 [as 包別名]
import 包名.模塊名 [as 模塊新名]
import 包名.子包名.模塊名 [as 模塊新名]
from 包名 import 模塊名 [as 模塊新名]
from 包名.子包名 import 模塊名 [as 模塊新名]
from 包名.子包名.模塊名 import 屬性名[as 屬性新名]
from 包名 import *
from 包名.子包名 import *
...
__init__.py 內的 __all__ 列表
作用:
用來記錄此包中有哪些包或模塊需要在from import *語句導入時被導入
說明:
__all__列表只在from xxx import *語句中起作用
包的相對導入
是指包內模塊的相互導入
語法:
from 相對路徑包或模塊 import 屬性或模塊
或
from 相對路徑包或模塊 import *
說明:
包的相對導入不能用於import xxx 語句中
相對路徑:
. 代表當前目錄
.. 代表上一級目錄
... 代表上二級目錄
.... 以此類推
注: 相對導入時不能超出包的外部
包的加載路徑:
同模塊的加載路徑搜索
1. 搜索當前路徑
2. 搜索sys.path給定的路徑