官术网_书友最值得收藏!

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ù),否則說明被另外的模塊調用了。

主站蜘蛛池模板: 射阳县| 惠来县| 玛沁县| 巴林左旗| 大同市| 岑巩县| 大田县| 霍州市| 宜良县| 南雄市| 正定县| 金山区| 翁源县| 鹤山市| 永福县| 陕西省| 抚远县| 青州市| 巴南区| 南充市| 芦溪县| 营口市| 永仁县| 射洪县| 江华| 曲麻莱县| 都江堰市| 广宁县| 余干县| 开原市| 襄垣县| 丰都县| 和林格尔县| 乐安县| 紫阳县| 株洲市| 泰州市| 丘北县| 蓝山县| 金阳县| 澳门|