Python中的模塊介紹和使用

在Python中有一個(gè)概念叫做模塊(module),這個(gè)和C語言中的頭文件以及Java中的包很類似,比如在Python中要調(diào)用sqrt函數(shù),必須用import關(guān)鍵字引入math這個(gè)模塊,下面就來了解一下Python中的模塊。

說的通俗點(diǎn):模塊就好比是工具包,要想使用這個(gè)工具包中的工具(就好比函數(shù)),就需要導(dǎo)入這個(gè)模塊

1.import

在Python中用關(guān)鍵字import來引入某個(gè)模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。

形如:

importmodule1,mudule2...

當(dāng)解釋器遇到import語句,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入。

在調(diào)用math模塊中的函數(shù)時(shí),必須這樣引用:

模塊名.函數(shù)名

這種方式必須加上模塊名調(diào)用,因?yàn)榭赡艽嬖谶@樣一種情況:在多個(gè)模塊中含有相同名稱的函數(shù),此時(shí)如果只是通過函數(shù)名來調(diào)用,解釋器無法知道到底要調(diào)用哪個(gè)函數(shù)。所以如果像上述這樣引入模塊的時(shí)候,調(diào)用函數(shù)必須加上模塊名。

有時(shí)候我們只需要用到模塊中的某個(gè)函數(shù),只需要引入該函數(shù)即可,此時(shí)可以用下面方法實(shí)現(xiàn):

from模塊名import函數(shù)名1,函數(shù)名2....

不僅可以引入函數(shù),還可以引入一些全局變量、類等

注意:

通過這種方式引入的時(shí)候,調(diào)用函數(shù)時(shí)只能給出函數(shù)名,不能給出模塊名,但是當(dāng)兩個(gè)模塊中含有相同名稱函數(shù)的時(shí)候,后面一次引入會(huì)覆蓋前一次引入。也就是說假如模塊A中有函數(shù)function( ),在模塊B中也有函數(shù)function( ),如果引入A中的function在先、B中的function在后,那么當(dāng)調(diào)用function函數(shù)的時(shí)候,是去執(zhí)行模塊B中的function函數(shù)。

如果想一次性引入math中所有的東西,還可以通過from math import *來實(shí)現(xiàn)

2.from…import

Python的from語句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中

語法如下:

from modname import name1[, name2[, ... nameN]]

例如,要導(dǎo)入模塊fib的fibonacci函數(shù),使用如下語句:

from fib import fibonacci

注意

·不會(huì)把整個(gè)fib模塊導(dǎo)入到當(dāng)前的命名空間中,它只會(huì)將fib里的fibonacci單個(gè)引入

3.from … import *

把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的,只需使用如下聲明:

from modname import *

注意

·這提供了一個(gè)簡單的方法來導(dǎo)入一個(gè)模塊中的所有項(xiàng)目。然而這種聲明不該被過多地使用。

4.as

5.定位模塊

當(dāng)你導(dǎo)入一個(gè)模塊,Python解析器對(duì)模塊位置的搜索順序是:

1.當(dāng)前目錄

2.如果不在當(dāng)前目錄,Python則搜索在shell變量PYTHONPATH下的每個(gè)目錄。

3.如果都找不到,Python會(huì)察看默認(rèn)路徑。UNIX下,默認(rèn)路徑一般為/usr/local/lib/python/

4.模塊搜索路徑存儲(chǔ)在system模塊的sys.path變量中。變量里包含當(dāng)前目錄,PYTHONPATH和由安裝過程決定的默認(rèn)目錄。

6.模塊制作

1.定義自己的模塊

在Python中,每個(gè)Python文件都可以作為一個(gè)模塊,模塊的名字就是文件的名字。

比如有這樣一個(gè)文件test.py,在test.py中定義了函數(shù)add

2.調(diào)用自己定義的模塊

那么在其他文件中就可以先import test,然后通過test.add(a,b)來調(diào)用了,當(dāng)然也可以通過from test import add來引入

main.py

3.測試模塊

在實(shí)際開中,當(dāng)一個(gè)開發(fā)人員編寫完一個(gè)模塊后,為了讓模塊能夠在項(xiàng)目中達(dá)到想要的效果,這個(gè)開發(fā)人員會(huì)自行在py文件中添加一些測試信息,例如:

如果此時(shí),在其他py文件中引入了此文件的話,想想看,測試的那段代碼是否也會(huì)執(zhí)行呢!

至此,可發(fā)現(xiàn)test.py中的測試代碼,應(yīng)該是單獨(dú)執(zhí)行test.py文件時(shí)才應(yīng)該執(zhí)行的,不應(yīng)該是其他的文件中引用而執(zhí)行

為了解決這個(gè)問題,python在執(zhí)行一個(gè)文件時(shí)有個(gè)變量__name__

總結(jié):

·可以根據(jù)__name__變量的結(jié)果能夠判斷出,是直接執(zhí)行的python腳本還是被引入執(zhí)行的,從而能夠有選擇性的執(zhí)行測試代碼

7.模塊中的__all__

1.沒有__all__

2.模塊中有__all__

8.python中的包

1.引入包

有2個(gè)模塊功能有些聯(lián)系

所以將其放到同一個(gè)文件夾下

使用import文件.模塊 的方式導(dǎo)入

使用from文件夾import模塊 的方式導(dǎo)入

在msg文件夾下創(chuàng)建__init__.py文件

在__init__.py文件中寫入

重新使用from文件夾import模塊 的方式導(dǎo)入

總結(jié):

包將有聯(lián)系的模塊組織在一起,即放到同一個(gè)文件夾下,并且在這個(gè)文件夾創(chuàng)建一個(gè)名字為__init__.py文件,那么這個(gè)文件夾就稱之為包

有效避免模塊名稱沖突問題,讓應(yīng)用組織結(jié)構(gòu)更加清晰

2__init__.py文件有什么用

__init__.py控制著包的導(dǎo)入行為

可以在__init__內(nèi)添加導(dǎo)入的功能 比如from ab import a

3__init__.py為空

僅僅是把這個(gè)包導(dǎo)入,不會(huì)導(dǎo)入包中的模塊

4__all__

在__init__.py文件中,定義一個(gè)__all__變量,它控制著from包名import *時(shí)導(dǎo)入的模塊

5.(了解)可以在__init__.py文件中編寫內(nèi)容

可以在這個(gè)文件中編寫語句,當(dāng)導(dǎo)入時(shí),這些語句就會(huì)被執(zhí)行

__init__.py文件

6.擴(kuò)展:嵌套的包

假定我們的包的例子有如下的目錄結(jié)構(gòu):

Phone是最頂層的包,Voicedta等是它的子包。 我們可以這樣導(dǎo)入子包:

你也可使用from-import實(shí)現(xiàn)不同需求的導(dǎo)入

第一種方法是只導(dǎo)入頂層的子包,然后使用屬性/點(diǎn)操作符向下引用子包樹:

此外,我們可以還引用更多的子包:

事實(shí)上,你可以一直沿子包的樹狀結(jié)構(gòu)導(dǎo)入:

在我們上邊的目錄結(jié)構(gòu)中,我們可以發(fā)現(xiàn)很多的__init__.py文件。這些是初始化模塊,from-import語句導(dǎo)入子包時(shí)需要用到它。 如果沒有用到,他們可以是空文件。

包同樣支持from-import all語句:

然而,這樣的語句會(huì)導(dǎo)入哪些文件取決于操作系統(tǒng)的文件系統(tǒng)。所以我們?cè)赺_init__.py中加入__all__變量。該變量包含執(zhí)行這樣的語句時(shí)應(yīng)該導(dǎo)入的模塊的名字。它由一個(gè)模塊名字符串列表組成。

總結(jié):

9.模塊發(fā)布

1.mymodule目錄結(jié)構(gòu)體如下:

2.編輯setup.py文件??

py_modules需指明所需包含的py文件

3.構(gòu)建模塊

python setup.py build

4.生成發(fā)布?jí)嚎s包

?python setup.py sdist

打包后,生成最終發(fā)布?jí)嚎s包yongGe-1.0.tar.gz ,目錄結(jié)構(gòu)

10.模塊的安裝使用

1.安裝的方式

1.找到模塊的壓縮包

2.解壓

3.進(jìn)入文件夾

4.執(zhí)行命令python setup.py install

注意:

·如果在install的時(shí)候,執(zhí)行目錄安裝,可以使用python setup.py install --prefix=安裝路徑

2.模塊的引入

在程序中,使用from import即可完成對(duì)安裝的模塊使用

from模塊名import模塊名或者*

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用 python 解釋器來編程從 Python 解釋器退出再進(jìn)入,那么你定義的所有的方法和變量就都消失了。 為此...
    chen_000閱讀 582評(píng)論 0 3
  • 1.1Python中的模塊介紹和使用 有過C語言編程經(jīng)驗(yàn)的朋友都知道在C語言中如果要引用sqrt函數(shù),必須用語句#...
    TENG書閱讀 484評(píng)論 0 0
  • 類 類的概念在許多語言中出現(xiàn),很容易理解。它將數(shù)據(jù)和操作進(jìn)行封裝,以便將來的復(fù)用。 模塊 模塊,在Python可理...
    隨風(fēng)化作雨閱讀 1,972評(píng)論 0 5
  • 1模塊 1.1Python中的模塊介紹和使用 有過C語言編程經(jīng)驗(yàn)的朋友都知道在C語言中如果要引用sqrt函數(shù),必須...
    PythonMaO閱讀 517評(píng)論 0 0
  • 告別舊的一年,告別不好的過去,迎接嶄新的未來,該做的計(jì)劃每天都堅(jiān)持,一萬小時(shí)定律有什么大不了的,一萬就一萬咯。堅(jiān)持...
    雙鴿閱讀 206評(píng)論 0 0

友情鏈接更多精彩內(nèi)容