Python系列12——模塊

目錄

一、模塊的路徑

二、模塊和包

1、模塊(Module)就是包bai含代碼的文件,不一定是Python代碼,有四種du代碼類型的模塊:

2、包(Package)就是包含模塊文件的目錄,目錄名稱就是包名稱,目錄中可以包含目錄,子目錄也是包,但包名稱應該包含上一級目錄的名稱。Python引入了按目錄來組織模塊是爲了避免模塊名衝突,不同包中的模塊名可以相同。


一、模塊的路徑

# 通過import sys
# sys.path可以得到python模塊的搜索路徑

>>> import sys
>>> sys.path
['', 'D:\\Program Files\\Python\\Lib\\idlelib', 
'D:\\Program Files\\Python\\python37.zip', 
'D:\\Program Files\\Python\\DLLs', 
'D:\\Program Files\\Python\\lib', 
'D:\\Program Files\\Python', 
'D:\\Program Files\\Python\\lib\\site-packages']

# 第一個空字符串,表示當前搜索路徑
# 通過import os , os.getcwd()可以得到
>>> import os
>>> os.getcwd()
'D:\\Program Files\\Python'

# 自己編寫一個模塊,命名爲module1,並保存在C:\Users\ilgfc\Desktop
def my_print():
    print("北京歡迎你")

# 由sys.path可以知道,python不能搜索到定義的module1包
# 因此需要添加該搜索路徑到python,添加方式爲sys.path.append('要添加的路徑')
>>> sys.path.append('C:/Users/ilgfc/Desktop')
>>> import module1
>>> module1.my_print()
北京歡迎你



# 除了上面的方法之外,還有 兩種方法
# 第一,可以通過在任意搜索路徑下新建pth文件,pth文件的內容爲被添加模塊所在路徑
# 第二,在系統的環境變量設置中新添加PYTHONHOME環境變量,將被添加的模塊路徑追加到PYTHONHOME的
# 值中
# 這兩種方法能夠永久的改變模塊的搜索路徑

二、模塊和包

1、模塊(Module)就是包bai含代碼的文件,不一定是Python代碼,有四種du代碼類型的模塊:

使用zhiPython寫的程序( .py文件)

•C或C++擴展(已編譯爲共享dao庫或DLL文件)

•包(包含多個模塊)

•內建模塊(使用C編寫並已鏈接到Python解釋器內)

使用模塊可以提高代碼的可維護性和重複使用,還可以避免函數名和變量名衝突。相同名字的函數和變量完全可以分別存在不同的模塊中,所以編寫自己的模塊時,不必考慮名字會與其他模塊衝突,但要注意儘量不要與內置函數名字衝突。

2、包(Package)就是包含模塊文件的目錄,目錄名稱就是包名稱,目錄中可以包含目錄,子目錄也是包,但包名稱應該包含上一級目錄的名稱。Python引入了按目錄來組織模塊是爲了避免模塊名衝突,不同包中的模塊名可以相同。

/*
爲聲音文件和聲音數據的統一處理,設計一個模塊集合(一個“包”)。
由於存在很多不同的聲音文件格式(通常由它們的擴展名來識別,例如:.wav, .aiff, .au),
因此爲了不同文件格式間的轉換,你可能需要創建和維護一個不斷增長的模塊集合。 
你可能還想對聲音數據還做很多不同的處理(例如,混聲,添加回聲,使用均衡器功能,
創造人工立體聲效果), 因此爲了實現這些處理,你將另外寫一個無窮盡的模塊流。
這是你的包的可能結構(以分層文件系統的形式表示):
*/

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.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 ,並使其在沒有包前綴的情況下可用,因此可以按如下方式使用:
echo.echofilter(input, output, delay=0.7, atten=4)

另一種形式是直接導入所需的函數或變量:
from sound.effects.echo import echofilter
同樣,這也會加載子模塊 echo,但這會使其函數 echofilter() 直接可用:
echofilter(input, output, delay=0.7, atten=4)

請注意,當使用 from package import item 時,item可以是包的子模塊(或子包),
也可以是包中定義的其他名稱,如函數,類或變量。 
import 語句首先測試是否在包中定義了item;如果沒有,它假定它是一個模塊並嘗試加載它。
如果找不到它,則引發 ImportError 異常。

相反,當使用 import item.subitem.subsubitem 這樣的語法時,
除了最後一項之外的每一項都必須是一個包;
最後一項可以是模塊或包,但不能是前一項中定義的類或函數或變量。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章