什麼是模塊
模塊是一個包含所有你定義的函數和變量的文件,其後綴名是.py
。模塊可以被別的程序引入(import
關鍵字),以使用該模塊中的函數等功能。這也是使用 python 標準庫的方法。
模塊實際上對應於程序文件
對比
- 容器 -> 數據的封裝
- 函數 -> 語句的封裝
- 類 -> 方法和屬性的封裝
- 模塊 -> 程序文件
命名空間問題
分類:
- 內置命名空間(Built-in Namespaces):Python運行起來,它們就存在了。內置函數的命名空間都屬於內置命名空間,所以,我們可以在任何程序中直接運行它們,比如
id()
,不需要做什麼操作,拿過來就直接使用了。 - 全局命名空間(Module:GlobalNamespaces):每個模塊創建它自己所擁有的全局命名空間,不同模塊的全局命名空間彼此獨立,不同模塊中相同名稱的命名空間,也會因爲模塊的不同而不相互干擾。
- 本地命名空間(Function & Class:LocalNamespaces):模塊中有函數或者類,每個函數或者類所定義的命名空間就是本地命名空間。如果函數返回了結果或者拋出異常,則本地命名空間也結束了。
版權聲明:本文爲CSDN博主「老馬的程序人生」的原創文章,遵循 CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/LSGO_MYP/article/details/102925235
程序在查詢上述三種命名空間的時候,就按照從裏到外的順序,即:Local Namespaces --> Global Namesspaces --> Built-in Namesspaces,三種關係的遞進通過.
操作符實現
很有意思的例子,再IDLE中
>>> str
<class 'str'>
>>> str=1
>>> str
1
>>> del str
>>> str
<class 'str'>
>>>
引入模塊的方法
import 模塊名
from 模塊名 import 函數名
其衍生爲:不推薦這種寫法 from TemperatureConversion import *
容易造成混亂
import 模塊名 as 新名字
if __name__ == '__main__'
判斷當前執行的模塊是否是主模塊,也就是該模塊並非由import
導入了其他程序,而是主要運行。
搜索路徑
python在此路徑尋找模塊,該模塊與環境變量設置有關(好像?—?),搜索路徑被存儲在 sys 模塊中的 path 變量中。
import sys
print(sys.path)
# ['C:\\ProgramData\\Anaconda3\\DLLs', 'C:\\ProgramData\\Anaconda3\\lib', 'C:\\ProgramData\\Anaconda3', 'C:\\ProgramData\\Anaconda3\\lib\\site-packages',...]
包(package)
通過pip install
下載的模塊實際上也大多就是包。
包一種文件路徑結構:
sound/ 頂層包
__init__.py 初始化 sound 包
formats/ 文件格式轉換子包
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 聲音效果子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ filters 子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
目錄只有包含一個叫做 __init__.py
的文件纔會被認作是一個包,最簡單的情況,放一個空的 __init__.py
就可以了。
導入子模塊的方法
import sound.effects.echo
這將會導入子模塊 sound.effects.echo
。 他必須使用全名去訪問:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
或from sound.effects import echo
這種方法不需要全名訪問
echo.echofilter(input, output, delay=0.7, atten=4)
或from sound.effects.echo import echofilter
則直接調用函數
echofilter(input, output, delay=0.7, atten=4)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
如果我們使用 from sound.effects import *
會發生什麼?
Python 會進入文件系統,找到這個包裏面所有的子模塊,一個一個的把它們都導入進來。