這篇文章帶給大家的內容是關於什麼是模組? Python中模組module的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
Python中,一個.py檔就稱之為一個模組。
那麼使用模組有什麼好處呢?
(1)提高了程式碼的可維護性。
(2)程式碼不必從零開始,當一個模組寫完畢後,就可以被其他地方應用。
(3)可以避免函數名稱和變數名稱衝突,相同的函數名稱和變數可以存放在不同的模組中,但是要注意盡量不要與內建函數名字衝突。為避免模組名衝突,python又引入了按目錄來阻止模組衝突的方法,稱為包(python package)。
一個abc.py的檔案就是一個名字為abc的模組,一個xyz.py的檔案就是一個名字為xyz的模組。假如abc和xyz這兩個模組名字與其他模組衝突了,於是我們可以透過不同的套件來組織模組,避免模組衝突。
則可為:
↓ mycompany # 按目录存放 _init_.py # 模块名:mycompany abc.py # 模块名:mycompany.abc xyz.py # 模块名:mycompany.xyz
引入了套件以後,只要頂層的套件名稱不與別人衝突,那麼所有模組都不會與別人衝突。
每一個套件目錄下都會有一個_init_.py的文件,這個文件是必須存在的,否則python就把這個目錄當成普通目錄,而不是一個包。
_init_.py可以是空文件,也可以有python程式碼,因為_init_.py本身就是一個模組。
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()
說明:
註解# -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!
除了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
#如下:
安裝成功後便可以使用Pillow了。其他常用的第三方函式庫還有:MySQL的驅動程式、用於科學計算的NumPy函式庫等等。
pip升級:
在使用pip進行安裝時,有時候會提示pip的版本太低,需要upgrade。提示會給予要執行的語句,依照提示執行就行。
執行指令:python –m pip install –upgrade pip
我們也可以匯入自己寫入的模組。當我們試圖載入一個模組時,Python會在指定的路徑下搜尋對應的.py文件,如果找不到,就會報錯,例如:
預設情況下,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
此时我们就得到了预期结果,不输出多余的结果。
以上是什麼是模組? Python模組中模組module的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!