Python基礎刻意練習:模塊

參考鏈接

什麼是模塊

模塊是一個包含所有你定義的函數和變量的文件,其後綴名是.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 會進入文件系統,找到這個包裏面所有的子模塊,一個一個的把它們都導入進來。
在這裏插入圖片描述

實例:

模塊衝突

在這裏插入圖片描述

模塊常量

在這裏插入圖片描述

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