程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> Python模塊介紹

Python模塊介紹

編輯:Python
  • 簡介

你已經學習了如何在你的程序中定義一次函數而重用代碼。如果你想要在其他程序中重用很多函數,那麼你該如何編寫程序呢?你可能已經猜到了,答案是使用模塊。模塊基本上就是一個包含了所有你定義的函數和變量的文件。為了在其他程序中重用模塊,模塊的文件名必須以.py為擴展名。 模塊可以從其他程序 輸入 以便利用它的功能。這也是我們使用Python標准庫的方法。首先,我們將學習如何使用標准庫模塊。

 

  • 使用sys模塊
#! /usr/bin/python

import sys

print ' The command line arguments are:'
for i in sys.argv:
  print i

print '\n\nThe PYTHONPATH is ',sys.path,'\n'

結果:

spdbmadeMacBook-Pro:python spdbma$ ./test.py we are arguments

 The command line arguments are:

./test.py

we

are

arguments

 

 

The PYTHONPATH is  ['/Users/spdbma/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']

解析:

首先,我們利用import語句 輸入 sys模塊。基本上,這句語句告訴Python,我們想要使用這個模塊。sys模塊包含了與Python解釋器和它的環境有關的函數。 當Python執行import sys語句的時候,它在sys.path變量中所列目錄中尋找sys.py模塊。如果找到了這個文件,這個模塊的主塊中的語句將被運行,然後這個模塊將能夠被你 使用 。注意,初始化過程僅在我們 第一次 輸入模塊的時候進行。另外,“sys”是“system”的縮寫。 sys模塊中的argv變量通過使用點號指明——sys.argv——這種方法的一個優勢是這個名稱不會與任何在你的程序中使用的argv變量沖突。另外,它也清晰地表明了這個名稱是sys模塊的一部分。 sys.argv變量是一個字符串的 列表 (列表會在後面的章節詳細解釋)。特別地,sys.argv包含了 命令行參數 的列表,即使用命令行傳遞給你的程序的參數。 如果你使用IDE編寫運行這些程序,請在菜單裡尋找一個指定程序的命令行參數的方法。 這裡,當我們執行python using_sys.py we are arguments的時候,我們使用python命令運行using_sys.py模塊,後面跟著的內容被作為參數傳遞給程序。Python為我們把它存儲在sys.argv變量中。 記住,腳本的名稱總是sys.argv列表的第一個參數。所以,在這裡,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,Python從0開始計數,而非從1開始。 sys.path包含輸入模塊的目錄名列表。我們可以觀察到sys.path的第一個字符串是空的——這個空的字符串表示當前目錄也是sys.path的一部分,這與PYTHONPATH環境變量是相同的。這意味著你可以直接輸入位於當前目錄的模塊。否則,你得把你的模塊放在sys.path所列的目錄之一。

 

  • 字節編譯的.pyc文件

輸入一個模塊相對來說是一個比較費時的事情,所以Python做了一些技巧,以便使輸入模塊更加快一些。一種方法是創建 字節編譯的文件 ,這些文件以.pyc作為擴展名。字節編譯的文件與Python變換程序的中間狀態有關(是否還記得Python如何工作的介紹?)。當你在下次從別的程序輸入這個模塊的時候,.pyc文件是十分有用的——它會快得多,因為一部分輸入模塊所需的處理已經完成了。另外,這些字節編譯的文件也是與平台無關的。所以,現在你知道了那些.pyc文件事實上是什麼了。

  • from..import語句

 

如果你想要直接輸入argv變量到你的程序中(避免在每次使用它時打sys.),那麼你可以使用from sys import argv語句。如果你想要輸入所有sys模塊使用的名字,那麼你可以使用from sys import *語句。這對於所有模塊都適用。一般說來,應該避免使用from..import而使用import語句,因為這樣可以使你的程序更加易讀,也可以避免名稱的沖突。

  • 模塊的__name__

每個模塊都有一個名稱,在模塊中可以通過語句來找出模塊的名稱。這在一個場合特別有用——就如前面所提到的,當一個模塊被第一次輸入的時候,這個模塊的主塊將被運行。假如我們只想在程序本身被使用的時候運行主塊,而在它被別的模塊輸入的時候不運行主塊,我們該怎麼做呢?這可以通過模塊的__name__屬性完成。 使用模塊的__name__

#!/usr/bin/python
# Filename: using_name.py

if __name__ == '__main__':
    print 'This program is being run by itself'
else:
    print 'I am being imported from another module' 

結果:

$ python using_name.py This program is being run by itself

$ python >>> import using_name I am being imported from another module

>>>

解析:

它如何工作 每個Python模塊都有它的__name__,如果它是'__main__',這說明這個模塊被用戶單獨運行,我們可以進行相應的恰當操作。

  • 創建並調用自己的模塊mymodule.py
#! /usr/bin/python
# coding:utf-8
# Filename:mymodule.py
def sayhi(): print 'Hi,this is my mymodule speaking' version = '0.1'

創建第二個模塊mymodule_demo.py,並調用mymodule.py。

#! /usr/bin/python
# coding:utf-8
# Filename:mymodule_demo.py
import mymodule mymodule.sayhi() print 'Version ',mymodule.version

運行命令:python mymodule_demo.py的結果

spdbmadeMacBook-Pro:python spdbma$ python mymodule_demo.py 

Hi,this is my mymodule speaking

Version  0.1

...更新中...

 

 

 

 

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved