Python - 模塊module


1、什麼是模塊

Python中,一個.py文件就稱之爲一個模塊。
那麼使用模塊有什麼好處呢?html

(1)提升了代碼的可維護性。
(2)代碼沒必要從零開始,當一個模塊編寫完畢後,就能夠被其餘地方應用。
(3)能夠避免函數名和變量名衝突,相同的函數名和變量能夠存放在不一樣的模塊中,可是要注意儘可能不要與內置函數名字衝突。
Python全部的內置函數: https://docs.python.org/3/lib...

爲避免模塊名衝突,python又引入了按目錄來阻止模塊衝突的方法,稱爲(python package)。
一個abc.py的文件就是一個名字爲abc的模塊,一個xyz.py的文件就是一個名字爲xyz的模塊。假如abcxyz這兩個模塊名字與其餘模塊衝突了,因而咱們能夠經過不一樣的包來組織模塊,避免模塊衝突。
則可爲:python

↓ mycompany      # 按目錄存放
     _init_.py   # 模塊名:mycompany
     abc.py      # 模塊名:mycompany.abc
     xyz.py      # 模塊名:mycompany.xyz

引入了包之後,只要頂層的包名不與別人衝突,那全部模塊都不會與別人衝突。
每個包目錄下都會有一個_init_.py的文件,這個文件是必須存在的,不然python就把這個目錄當成普通目錄,而不是一個包。
_init_.py能夠是空文件,也能夠有python代碼,由於_init_.py自己就是一個模塊。linux

2、使用Python自帶模塊

Python內置了不少很是有用的模塊,只要安裝完畢,這些模塊就能夠經過import馬上導入使用。
例以下列小程序:以自建的sys模塊,編寫一個hello的模塊hello.py 小程序

# !/usr/bin/env python    # -1-
# -*-coding:utf-8 -*-     # -2- 
_author_ = 'xionglp'      # 使用_author_變量把做者寫進去

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()

說明:app

  • 註釋 # -1- :讓該.py文件直接在unix/linux/mac上運行
  • 註釋 # -2- :.py文件使用標準UTF-8 編碼
  • import sys:導入sys模塊。以後即可以利用sys這個變量,訪問sys模塊的全部功能。
    sys模塊有一個argv變量,用list存儲了命令行的全部參數。argv至少有一個元素,由於第一個參數永遠是該.py文件的名稱。
  • 當在命令行運行hello.py文件時,python解釋器就把一個特殊變量__name__置爲__main__。若是在其餘地方導入該模塊時,if判斷將失敗,即if僅在此模塊單獨運行時生效。所以這種if測試可讓一個模塊經過命令行運行時執行一些額外的代碼,最多見的就是運行測試。

在交互式環境(cmd)中導入該模塊:函數

>>> import hello                         
>>> hello.test()                   
hello, world!

3、安裝使用第三方模塊

除了Python本身的包,還能夠安裝安裝第三方模塊。第三方包安裝是經過包管理工具pip完成的。
通常來講,第三方庫都會在Python官方的pypi.python.org網站註冊。因此要安裝一個第三方庫,必須先知道該庫的名稱,能夠在官網或者pypi上搜索。好比Pillow的名稱叫Pillow,所以,安裝Pillow的命令就是:pip install Pillow工具

  • 步驟1:找到安裝Python路徑中的easy_install.exe,例如:D:PythonScripts
  • 步驟2:打開cmd,輸入安裝命令:easy_install.exe pip (pip安裝成功)
  • 步驟3:在cmd下執行pip,輸入命令:pip install pillow

以下:
clipboard.png測試

安裝成功後即可以使用Pillow了。其餘經常使用的第三方庫還有:MySQL的驅動、用於科學計算的NumPy庫等等。網站

pip升級:
在使用pip進行安裝時,有時候會提示pip的版本過低,須要upgrade。提示會給出要執行的語句,按照提示執行就行。
執行命令:python –m pip install –upgrade pip編碼

4、模塊搜索路徑

咱們也能夠導入本身寫入的模塊。當咱們試圖加載一個模塊時,Python會在指定的路徑下搜索對應的.py文件,若是找不到,就會報錯,例如:

clipboard.png

默認狀況下,Python解釋器會搜索當前目錄、全部已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中:

>>>import sys
>>>sys.path

若是咱們要添加本身的搜索目錄,有兩種方法:

  • 法一:直接修改sys.path,添加要搜索的目錄,這種方法是在運行時修改,運行結束後失效。
>>> import sys
>>> sys.path.append('/Users/xionglp/my_py_scripts')
  • 法二:設置環境變量PYTHONPATH,該環境變量的內容會被自動添加到模塊搜索路徑中。設置方式與設置Path環境變量相似。注意只須要添加你本身的搜索路徑,Python本身自己的搜索路徑不受影響。

【補充點能量】if __name__ =="__main__":

  • __name__:爲系統變量,有兩個取值。當模塊是被調用執行時,取值爲模塊的名字;當模塊是直接執行時,則該變量取值爲__name__
  • if __name__ == "__main__"實現的功能:可讓模塊既能夠導入到別的模塊中用,也能夠本身執行。
英文解釋說: 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('調用another test module模塊執行的結果時:',atest.addFunc(12,23))

運行:

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
調用another test module模塊執行的結果時: 35

說明:當運行anothertest.py的時候,先運行了atest.py,再運行anothertest.py。
若不但願出現atest的內容,python提供了一個系統變量:__name__。能夠把被調用的測試代碼寫在if語句裏,當調用該module時,此時的__name__取值爲該模塊的名字,因此if判斷爲假,不執行後續代碼以下:

if __name__ == '__main__':`
       print ('atest的計算結果:',addFunc(1,1))

則運行結果爲:

D:\Python_project>python anothertest.py
調用another test module模塊執行的結果時: 35

此時咱們就獲得了預期結果,不輸出多餘的結果。


❤ thanks for watching, keep on updating...

相關文章
相關標籤/搜索