標籤:

Python中各個模塊的介紹和使用

歡迎訪問leadai.org查看更多文章

作者,許勝利,Python開發工程師,任職於上海某財富管理有限公司。

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

說的通俗點:模塊就好比是工具包,要想使用這個工具包中的工具(就好比函數),就需要導入這個模塊

1、import

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

形如:

importmodule1,mudule2...當解釋器遇到import語句,如果模塊在當前的搜索路徑就會被導入。

在調用math模塊中的函數時,必須這樣引用:模塊名.函數名

這種方式必須加上模塊名調用,因為可能存在這樣一種情況:在多個模塊中含有相同名稱的函數,此時如果只是通過函數名來調用,解釋器無法知道到底要調用哪個函數。所以如果像上述這樣引入模塊的時候,調用函數必須加上模塊名。

有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可,此時可以用下面方法實現:

from模塊名import函數名1,函數名2....不僅可以引入函數,還可以引入一些全局變數、類等。

注意:通過這種方式引入的時候,調用函數時只能給出函數名,不能給出模塊名,但是當兩個模塊中含有相同名稱函數的時候,後面一次引入會覆蓋前一次引入。也就是說假如模塊A中有函數function( ),在模塊B中也有函數function( ),如果引入A中的function在先、B中的function在後,那麼當調用function函數的時候,是去執行模塊B中的function函數。

如果想一次性引入math中所有的東西,還可以通過from math import *來實現。

2、from...import

Python的from語句讓你從模塊中導入一個指定的部分到當前命名空間中。

語法如下:

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

例如,要導入模塊fib的fibonacci函數,使用如下語句:from fib import fibonacci。

注意:不會把整個fib模塊導入到當前的命名空間中,它只會將fib里的fibonacci單個引入。

3、from...import*

把一個模塊的所有內容全都導入到當前的命名空間也是可行的,只需使用如下聲明:from modname import *

注意:這提供了一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用。

4、as

5、定位模塊

當你導入一個模塊,Python解析器對模塊位置的搜索順序是:

1、當前目錄

2、如果不在當前目錄,Python則搜索在shell變數PYTHONPATH下的每個目錄。

3、如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般為/usr/local/lib/python/

4、模塊搜索路徑存儲在system模塊的sys.path變數中。變數里包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。

6、模塊製作

(1)定義自己的模塊

在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。有這樣一個文件test.py,在test.py中定義了函數add。

(2)調用自己定義的模塊

那麼在其他文件中就可以先import test,然後通過test.add(a,b)來調用了,當然也可以通過from test import add來引入。

main.py

(3)測試模塊

在實際開中,當一個開發人員編寫完一個模塊後,為了讓模塊能夠在項目中達到想要的效果,這個開發人員會自行在py文件中添加一些測試信息,例如:

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

至此,可發現test.py中的測試代碼,應該是單獨執行test.py文件時才應該執行的,不應該是其他的文件中引用而執行。

為了解決這個問題,python在執行一個文件時有個變數__name__

總結:可以根據__name__變數的結果能夠判斷出,是直接執行的python腳本還是被引入執行的,從而能夠有選擇性的執行測試代碼。

7、模塊中的_all_

(1)沒有__all__

(2)模塊中有__all__

8、python中的包

(1)引入包

有2個模塊功能有些聯繫

所以將其放到同一個文件夾下

使用import文件.模塊 的方式導入

使用from文件夾import模塊 的方式導入

在msg文件夾下創建__init__.py文件

在__init__.py文件中寫入

重新使用from文件夾import模塊 的方式導入

總結:包將有聯繫的模塊組織在一起,即放到同一個文件夾下,並且在這個文件夾創建一個名字為__init__.py文件,那麼這個文件夾就稱之為包。有效避免模塊名稱衝突問題,讓應用組織結構更加清晰。

(2)__init__.py文件有什麼用

__init__.py控制著包的導入行為

可以在__init__內添加導入的功能 比如from ab import a

(3)__init__.py為空

僅僅是把這個包導入,不會導入包中的模塊。

(4)__all__

在__init__.py文件中,定義一個__all__變數,它控制著from包名import *時導入的模塊。

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

可以在這個文件中編寫語句,當導入時,這些語句就會被執行。

__init__.py文件

(6)擴展:嵌套的包

假定我們的包的例子有如下的目錄結構:

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

你也可使用from-import實現不同需求的導入

第一種方法是只導入頂層的子包,然後使用屬性/點操作符向下引用子包樹:

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

事實上,你可以一直沿子包的樹狀結構導入:

在我們上邊的目錄結構中,我們可以發現很多的__init__.py文件。這些是初始化模塊,from-import語句導入子包時需要用到它。 如果沒有用到,他們可以是空文件。

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

然而,這樣的語句會導入哪些文件取決於操作系統的文件系統。所以我們在__init__.py中加入__all__變數。該變數包含執行這樣的語句時應該導入的模塊的名字。它由一個模塊名字元串列表組成。

總結:

9、模塊發布

(1)mymodule目錄結構體如下:

(2)編輯setup.py文件

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

(3)構建模塊

python setup.py build

(4)生成發布壓縮包

python setup.py sdist

打包後,生成最終發布壓縮包yongGe-1.0.tar.gz ,目錄結構。

10、模塊的安裝使用

(1)安裝的方式

找到模塊的壓縮包、解壓、進入文件夾、執行命令python setup.py install。

注意:如果在install的時候,執行目錄安裝,可以使用python setup.py install --prefix=安裝路徑

(2)模塊的引入

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

from模塊名import模塊名或者*

查閱更為簡潔方便的分類文章以及最新的課程、產品信息,請移步至全新呈現的「LeadAI學院官網」:

leadai.org

推薦閱讀:

TAG:Python |