Python 模組和包的概念

2022-04-04 13:46:23 字數 4208 閱讀 4206

模組(modue)的概念:

在電腦程式的開發過程中,隨著程式**越寫越多,在乙個檔案裡**就會越來越長,越來越不容易維護。

為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。

使用模組有什麼好處?

最大的好處是大大提高了**的可維護性。

其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。

所以,模組一共三種:

另外,使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。

模組匯入方法

1 import 語句

1importmodule1[, module2[,... modulen]

當我們使用import語句的時候,python直譯器是怎樣找到對應的檔案的呢?答案就是直譯器有自己的搜尋路徑,存在sys.path裡。  12

['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu',

'/usr/lib/python3.4/lib-dynload','/usr/local/lib/python3.4/dist-packages','/usr/lib/python3/dist-packages']

因此若像我一樣在當前目錄下存在與要引入模組同名的檔案,就會把要引入的模組遮蔽掉。

2  from…import 語句

1frommodnameimportname1[, name2[, ... namen]]

這個宣告不會把整個modulename模組匯入到當前的命名空間中,只會將它裡面的name1或name2單個引入到執行這個宣告的模組的全域性符號表。

3  from…import* 語句

1frommodnameimport*

這提供了乙個簡單的方法來匯入乙個模組中的所有專案。然而這種宣告不該被過多地使用。大多數情況, python程式設計師不使用這種方法,因為引入的其它**的命名,很可能覆蓋了已有的定義。

4 執行本質12

#1 import test

#2 from test import add

無論1還是2,首先通過sys.path找到test.py,然後執行test指令碼(全部執行),區別是1會將test這個變數名載入到名字空間,而2只會將add這個變數名載入進來。  

包(package)

如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。

舉個例子,乙個abc.py的檔案就是乙個名字叫abc的模組,乙個xyz.py的檔案就是乙個名字叫xyz的模組。

現在,假設我們的abcxyz這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。方法是選擇乙個頂層包名:

請注意,每乙個包目錄下面都會有乙個__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄(資料夾),而不是乙個包。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是對應包的名字。

呼叫包就是執行包下的__init__.py檔案

注意點(important)

如果我們是直接執行某個.py檔案的時候,該檔案中那麼」__name__ == '__main__'「是true,但是我們如果從另外乙個.py檔案通過import匯入該檔案的時候,這時__name__的值就是我們這個py檔案的名字而不是__main__。

這個功能還有乙個用處:除錯**的時候,在」if __name__ == '__main__'「中加入一些我們的除錯**,我們可以讓外部模組呼叫的時候不執行我們的除錯**,但是如果我們想排查問題的時候,直接執行該模組檔案,除錯**能夠正常執行!s

注意

Python模組和包的概念

模組 模組是python組織 的基本方式。乙個python指令碼可以單獨執行,也可以匯入到另乙個指令碼中執行,當指令碼被匯入執行時,我們將其稱為模組 module 所有的.py檔案都可以作為乙個模組匯入。模組名與指令碼的檔名相同。模組是乙個可以匯入的python指令碼檔案。例如我們編寫了乙個名為he...

Python 模組和包的概念

python 模組和包的概念 模組 包 模組 modue 的概念 在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python...

Python中模組和包的概念

由於在python中一切皆為物件 object 想要好好理解module和package,一定要先理解namespace的概念。所謂namespace,是指標示符的可見範圍。對於python而言,常見的namespace主要有以下幾種 build in namespace 內建命名空間 global...