模組(modue)的概念:
在電腦程式的開發過程中,隨著程式**越寫越多,在乙個檔案裡**就會越來越長,越來越不容易維護。
為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。
使用模組有什麼好處?
最大的好處是大大提高了**的可維護性。
其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。
所以,模組一共三種:
另外,使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。
模組匯入方法
1 import 語句
1import
module1[, 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 語句
1from
modname
import
name1[, name2[, ... namen]]
這個宣告不會把整個modulename模組匯入到當前的命名空間中,只會將它裡面的name1或name2單個引入到執行這個宣告的模組的全域性符號表。
3 from…import* 語句
1from
modname
import
*
這提供了乙個簡單的方法來匯入乙個模組中的所有專案。然而這種宣告不該被過多地使用。大多數情況, 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
的模組。
現在,假設我們的abc
和xyz
這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。方法是選擇乙個頂層包名:
請注意,每乙個包目錄下面都會有乙個__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...