python 模組和包的概念
模組&包(* * * * *)
模組(modue)的概念:
在電腦程式的開發過程中,隨著程式**越寫越多,在乙個檔案裡**就會越來越長,越來越不容易維護。
為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。
使用模組有什麼好處?
最大的好處是大大提高了**的可維護性。
其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。
所以,模組一共三種:
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)
1--------------12
ifname==『main』:
print(『ok』)
「make a .py both importable and executable」
如果我們是直接執行某個.py檔案的時候,該檔案中那麼」__name__ == '__main__'「是true,但是我們如果從另外乙個.py檔案通過import匯入該檔案的時候,這時__name__的值就是我們這個py檔案的名字而不是__main__。
這個功能還有乙個用處:除錯**的時候,在」if __name__ == '__main__'「中加入一些我們的除錯**,我們可以讓外部模組呼叫的時候不執行我們的除錯**,但是如果我們想排查問題的時候,直接執行該模組檔案,除錯**能夠正常執行!s
123
4567
891011
1213
1415
##-------------cal.py
def add(x,y):
return x+y
##-------------main.py
import cal #from module import cal
def main():
cal.add(1,2)
##--------------bin.py
from module import main
main.main()
注意
Python模組和包的概念
模組 模組是python組織 的基本方式。乙個python指令碼可以單獨執行,也可以匯入到另乙個指令碼中執行,當指令碼被匯入執行時,我們將其稱為模組 module 所有的.py檔案都可以作為乙個模組匯入。模組名與指令碼的檔名相同。模組是乙個可以匯入的python指令碼檔案。例如我們編寫了乙個名為he...
Python 模組和包的概念
模組 modue 的概念 在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 mo...
Python中模組和包的概念
由於在python中一切皆為物件 object 想要好好理解module和package,一定要先理解namespace的概念。所謂namespace,是指標示符的可見範圍。對於python而言,常見的namespace主要有以下幾種 build in namespace 內建命名空間 global...