2.5.2 Python程序的構成
Python程序是由包、模塊和函數(shù)組成的。Python的包和Java的包其作用是相同的,都是為了實現(xiàn)程序的代碼復用。包必須含有__init__.py文件,它用于標識當前文件夾是一個包。
在Python的定義中,一個文件即一個模塊,模塊是由類、函數(shù)及程序組成的,此外,文件名是不能重復的,所以大家起名的時候要注意。
模塊是Python中的重要概念,Python的程序是由一個個模塊(即文件)組成的。模塊的導入和Java中包的導入概念類似,都是使用的import語句。在Python中,如果需要在程序中調用標準庫或其他第三方庫的類,需要先使用import或from...import...語句導入相關的模塊。
下面具體介紹這兩種情況。
一是import后面緊接的是模塊名(即文件名),舉例如下:
import time
調用模塊的函數(shù)或類時,程序需要以模塊名作為前綴,例如time.time()等。
可以被import語句導入的模塊有以下4類:
·使用Python寫的程序(.py文件)。
·C或C++擴展(已編譯為共享庫或DLL文件)。
·包(包含多個模塊)。
·內建模塊(使用C編寫并已鏈接到Python解釋器內)。
用逗號分割模塊名稱就可以同時導入多個模塊,示例如下:
import os,sys,time
模塊導入時可以使用as關鍵字來改變其中引用對象的名字,示例如下:
import os as system
二是從模塊(文件)中導入函數(shù)。該函數(shù)的語法為:from模塊名import函數(shù)名。
使用這種方式時,不需要使用模塊名作為前綴,示例如下:
from time import time,ctime
這樣就可以直接調用time()函數(shù)了。
事實上,最完整的導入語法應該是:
from package.module import function
我們在工作中一般都簡化為直接從模塊名(或文件名)中導入函數(shù)。
Python中的模塊搜索路徑
導入模塊時,解釋器會搜索sys.path列表,這個列表中保存著一系列目錄。一個典型的sys.path列表的值如下:
['', '/Library/Python/2.7/site-packages/pip-19.0.3-py2.7.egg', '/Library/Python/2.7/site-packages/six-1.12.0-py2.7.egg', '/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/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', '/Users/yuhongchun/Library/Python/2.7/lib/python/site-packages', '/Library/Python/2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages/IPython/extensions', '/Users/yuhongchun/.ipython']
如果要添加額外的路徑,我們應該如何操作呢?
可以用sys.path.append(),命令如下:
sys.path.append('/Users/yuhongchun/data/tmp')
如何從包中導入模塊呢?例如要從包mypack中導入模塊my1、my2和my3模塊,那么可以用以下命令全部導入:
from mypack import * #定義使用 `*` 可以導入的對象
但是,如果mypack包的__init__.py文件有限制,要定義__all__的內容:
__all__ = ['my1','my2']
那么,上面的語句是不能夠導入my3.py文件的。
另外,我們經(jīng)常會在Python程序中看到下面這種用法:
if __name__ == '__main__': main()
這種用法究竟有什么意義呢?
__name__用于判斷當前模塊是否是程序的入口,如果當前程序正在被使用,__name__的值為__main__,則會主動執(zhí)行此程序中的函數(shù),否則說明被另外的模塊調用了。
- 電腦組裝與系統(tǒng)安裝
- Implementing Cisco UCS Solutions
- Designing Purpose:Built Drones for Ardupilot Pixhawk 2.1
- Cybersecurity:Attack and Defense Strategies
- 嵌入式Linux系統(tǒng)開發(fā):基于Yocto Project
- Windows Server 2012 Hyper-V Cookbook
- Windows Phone應用程序開發(fā)
- Moodle 3.x Teaching Techniques(Third Edition)
- 數(shù)據(jù)中心系統(tǒng)工程及應用
- 嵌入式實時操作系統(tǒng)μC/OS原理與實踐
- Dreamweaver CS5.5 Mobile and Web Development with HTML5,CSS3,and jQuery
- Android物聯(lián)網(wǎng)開發(fā)細致入門與最佳實踐
- 無蘋果不生活 The New iPad隨身寶典
- Application Development in iOS 7
- 計算機系統(tǒng):基于x86+Linux平臺