摘要:一什么是模塊中,一個(gè)文件就稱之為一個(gè)模塊。所有的內(nèi)置函數(shù)為避免模塊名沖突,又引入了按目錄來(lái)阻止模塊沖突的方法,稱為包。例如下列小程序以自建的模塊,編寫(xiě)一個(gè)的模塊。如果在其他地方導(dǎo)入該模塊時(shí),判斷將失敗,即僅在此模塊多帶帶運(yùn)行時(shí)生效。
Python中,一個(gè).py文件就稱之為一個(gè)模塊。
那么使用模塊有什么好處呢?
(1)提高了代碼的可維護(hù)性。
(2)代碼不必從零開(kāi)始,當(dāng)一個(gè)模塊編寫(xiě)完畢后,就可以被其他地方應(yīng)用。
(3)可以避免函數(shù)名和變量名沖突,相同的函數(shù)名和變量可以存放在不同的模塊中,但是要注意盡量不要與內(nèi)置函數(shù)名字沖突。
Python所有的內(nèi)置函數(shù):https://docs.python.org/3/lib...
為避免模塊名沖突,python又引入了按目錄來(lái)阻止模塊沖突的方法,稱為包(python package)。
一個(gè)abc.py的文件就是一個(gè)名字為abc的模塊,一個(gè)xyz.py的文件就是一個(gè)名字為xyz的模塊。假如abc和xyz這兩個(gè)模塊名字與其他模塊沖突了,于是我們可以通過(guò)不同的包來(lái)組織模塊,避免模塊沖突。
則可為:
↓ mycompany # 按目錄存放 _init_.py # 模塊名:mycompany abc.py # 模塊名:mycompany.abc xyz.py # 模塊名:mycompany.xyz
引入了包以后,只要頂層的包名不與別人沖突,那所有模塊都不會(huì)與別人沖突。
每一個(gè)包目錄下都會(huì)有一個(gè)_init_.py的文件,這個(gè)文件是必須存在的,否則python就把這個(gè)目錄當(dāng)成普通目錄,而不是一個(gè)包。
_init_.py可以是空文件,也可以有python代碼,因?yàn)?b>_init_.py本身就是一個(gè)模塊。
Python內(nèi)置了很多非常有用的模塊,只要安裝完畢,這些模塊就可以通過(guò)import立刻導(dǎo)入使用。
例如下列小程序:以自建的sys模塊,編寫(xiě)一個(gè)hello的模塊hello.py 。
# !/usr/bin/env python # -1- # -*-coding:utf-8 -*- # -2- _author_ = "xionglp" # 使用_author_變量把作者寫(xiě)進(jìn)去 import sys def test(): args = sys.argv if len(args) == 1: print ("hello,world!") elif len(args) ==2: print("hello,%s !"% args[1]) else: print("too many arguments!") if __name__ == "__main__": test()
說(shuō)明:
注釋 # -1- :讓該.py文件直接在unix/linux/mac上運(yùn)行
注釋 # -2- :.py文件使用標(biāo)準(zhǔn)UTF-8 編碼
import sys:導(dǎo)入sys模塊。之后便可以利用sys這個(gè)變量,訪問(wèn)sys模塊的所有功能。
sys模塊有一個(gè)argv變量,用list存儲(chǔ)了命令行的所有參數(shù)。argv至少有一個(gè)元素,因?yàn)榈谝粋€(gè)參數(shù)永遠(yuǎn)是該.py文件的名稱。
當(dāng)在命令行運(yùn)行hello.py文件時(shí),python解釋器就把一個(gè)特殊變量__name__置為__main__。如果在其他地方導(dǎo)入該模塊時(shí),if判斷將失敗,即if僅在此模塊多帶帶運(yùn)行時(shí)生效。因此這種if測(cè)試可以讓一個(gè)模塊通過(guò)命令行運(yùn)行時(shí)執(zhí)行一些額外的代碼,最常見(jiàn)的就是運(yùn)行測(cè)試。
在交互式環(huán)境(cmd)中導(dǎo)入該模塊:
>>> import hello >>> hello.test() hello, world!三、安裝使用第三方模塊
除了Python自己的包,還可以安裝安裝第三方模塊。第三方包安裝是通過(guò)包管理工具pip完成的。
一般來(lái)說(shuō),第三方庫(kù)都會(huì)在Python官方的pypi.python.org網(wǎng)站注冊(cè)。所以要安裝一個(gè)第三方庫(kù),必須先知道該庫(kù)的名稱,可以在官網(wǎng)或者pypi上搜索。比如Pillow的名稱叫Pillow,因此,安裝Pillow的命令就是:pip install Pillow
步驟1:找到安裝Python路徑中的easy_install.exe,例如:D:PythonScripts
步驟2:打開(kāi)cmd,輸入安裝命令:easy_install.exe pip (pip安裝成功)
步驟3:在cmd下執(zhí)行pip,輸入命令:pip install pillow
如下:
安裝成功后便可以使用Pillow了。其他常用的第三方庫(kù)還有:MySQL的驅(qū)動(dòng)、用于科學(xué)計(jì)算的NumPy庫(kù)等等。
pip升級(jí):
在使用pip進(jìn)行安裝時(shí),有時(shí)候會(huì)提示pip的版本太低,需要upgrade。提示會(huì)給出要執(zhí)行的語(yǔ)句,按照提示執(zhí)行就行。
執(zhí)行命令:python –m pip install –upgrade pip
我們也可以導(dǎo)入自己寫(xiě)入的模塊。當(dāng)我們?cè)噲D加載一個(gè)模塊時(shí),Python會(huì)在指定的路徑下搜索對(duì)應(yīng)的.py文件,如果找不到,就會(huì)報(bào)錯(cuò),例如:
默認(rèn)情況下,Python解釋器會(huì)搜索當(dāng)前目錄、所有已安裝的內(nèi)置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中:
>>>import sys >>>sys.path
如果我們要添加自己的搜索目錄,有兩種方法:
法一:直接修改sys.path,添加要搜索的目錄,這種方法是在運(yùn)行時(shí)修改,運(yùn)行結(jié)束后失效。
>>> import sys >>> sys.path.append("/Users/xionglp/my_py_scripts")
法二:設(shè)置環(huán)境變量PYTHONPATH,該環(huán)境變量的內(nèi)容會(huì)被自動(dòng)添加到模塊搜索路徑中。設(shè)置方式與設(shè)置Path環(huán)境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。
【補(bǔ)充點(diǎn)能量】if __name__ =="__main__":
__name__:為系統(tǒng)變量,有兩個(gè)取值。當(dāng)模塊是被調(diào)用執(zhí)行時(shí),取值為模塊的名字;當(dāng)模塊是直接執(zhí)行時(shí),則該變量取值為__name__。
if __name__ == "__main__"實(shí)現(xiàn)的功能:可以讓模塊既可以導(dǎo)入到別的模塊中用,也可以自己執(zhí)行。
英文解釋說(shuō):make a script both importable and executeable
例如:新建模塊atest.py
# !/usr/bin/env python3 # -*- coding:utf-8 -*- "a test module" def addFunc(a, b): return a + b print("a_test_module"s result is ", addFunc(1, 1))
新建模塊anothertest.py
# !/usr/bin/env python3 # -*- coding :utf-8 -*- "another test module" import atest print("調(diào)用another test module模塊執(zhí)行的結(jié)果時(shí):",atest.addFunc(12,23))
運(yùn)行:
D:Python_project>python atest.py a_test_module"s result is 2 D:Python_project>python anothertest.py a_test_module"s result is 2 調(diào)用another test module模塊執(zhí)行的結(jié)果時(shí): 35
說(shuō)明:當(dāng)運(yùn)行anothertest.py的時(shí)候,先運(yùn)行了atest.py,再運(yùn)行anothertest.py。
若不希望出現(xiàn)atest的內(nèi)容,python提供了一個(gè)系統(tǒng)變量:__name__。可以把被調(diào)用的測(cè)試代碼寫(xiě)在if語(yǔ)句里,當(dāng)調(diào)用該module時(shí),此時(shí)的__name__取值為該模塊的名字,所以if判斷為假,不執(zhí)行后續(xù)代碼如下:
if __name__ == "__main__":` print ("atest的計(jì)算結(jié)果:",addFunc(1,1))
則運(yùn)行結(jié)果為:
D:Python_project>python anothertest.py 調(diào)用another test module模塊執(zhí)行的結(jié)果時(shí): 35
此時(shí)我們就得到了預(yù)期結(jié)果,不輸出多余的結(jié)果。
? thanks for watching, keep on updating...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42469.html
摘要:如果你這個(gè)腳本想要使用其它腳本里面的變量函數(shù)和類也是可以的,在你這個(gè)腳本里面用來(lái)導(dǎo)入要引用的腳本,而那個(gè)被引用的腳本就稱作模塊。 在此之前,我們運(yùn)行一些簡(jiǎn)短的Python代碼,都是通過(guò)Python解釋器(python或ipython)進(jìn)行的,如果我們退出解釋器再重新運(yùn)行解釋器后,上次敲進(jìn)去的變量、函數(shù)等都不見(jiàn)了,沒(méi)有保存下來(lái)。為了保存我們?cè)?jīng)寫(xiě)過(guò)的代碼,就是要寫(xiě)成.py文件,稱為腳本。...
摘要:的模塊其實(shí)就是封裝了一個(gè)或者多個(gè)功能的代碼集合,以便于重用,模塊可以是一個(gè)文件也可以是一個(gè)目錄,目錄的形式稱作包。已經(jīng)導(dǎo)入的模塊會(huì)保存在字典中。 Python的模塊其實(shí)就是封裝了一個(gè)或者多個(gè)功能的代碼集合,以便于重用,模塊可以是一個(gè)文件也可以是一個(gè)目錄,目錄的形式稱作包。 模塊分類 內(nèi)置模塊 內(nèi)置模塊可以理解成當(dāng)你安裝好python環(huán)境之后,直接可以使用import導(dǎo)入的就是內(nèi)置模塊,...
摘要:最近在看的官方文檔,提到一個(gè)的用法,很是不理解,所以查找了很多文檔,并進(jìn)行了如下總結(jié)。的用途定位并執(zhí)行該模塊。可讀取包內(nèi)任何文件內(nèi)容。如果沒(méi)有,則從查找,找到后載入內(nèi)存,并加入到字典,名稱也將導(dǎo)入到當(dāng)前模塊的命名空間。 最近在看 __main__ 的官方文檔 —— https://docs.python.org/3/library/__main__.html#module-__main...
摘要:相對(duì)導(dǎo)入相對(duì)導(dǎo)入使用模塊的決定它是否在一個(gè)包內(nèi)。當(dāng)你是用類似進(jìn)行相對(duì)導(dǎo)入的時(shí)候,點(diǎn)表明在包的層次中上升多少。所以,你不能在交互式會(huì)話中直接使用任何相對(duì)導(dǎo)入。 源題目與答案地址如下http://stackoverflow.com/questions/14132...。下面是我的翻譯(看作機(jī)翻也行),以及原文。 這個(gè)問(wèn)題是如何解決在相對(duì)導(dǎo)入的時(shí)候,如果出現(xiàn)System Error的時(shí)候的解...
摘要:一概念通常的程序的構(gòu)架是指將一個(gè)程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。的程序構(gòu)架可表示為一個(gè)程序就是一個(gè)模塊的系統(tǒng)。它有一個(gè)頂層文件啟動(dòng)后可運(yùn)行程序以及多個(gè)模塊文件用來(lái)導(dǎo)入工具庫(kù)。導(dǎo)入是中程序結(jié)構(gòu)的重點(diǎn)所在。 一、概念 通常的Python程序的構(gòu)架是指:將一個(gè)程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。 Python的程序構(gòu)架可表示為: showImg...
閱讀 3175·2021-09-10 10:51
閱讀 3359·2021-08-31 09:38
閱讀 1651·2019-08-30 15:54
閱讀 3138·2019-08-29 17:22
閱讀 3219·2019-08-26 13:53
閱讀 1968·2019-08-26 11:59
閱讀 3289·2019-08-26 11:37
閱讀 3317·2019-08-26 10:47