1. 程式人生 > >Python進階筆記(3)_ 模組和包

Python進階筆記(3)_ 模組和包

匯入模組
要使用一個模組,我們必須首先匯入該模組。Python使用import 語句匯入一個模組。例如,匯入系統自帶的模組 math:

import math

你可以認為 math 就是一個指向已匯入模組的變數,通過該變數,我們可以訪問 math 模組中所定義的所有公開的函式、變數和類。例如,我們呼叫冪函式 pow()

import math
print math.pow(2, 0.5)

可以看到,呼叫時要寫成 math.pow , 這樣寫的好處是,假若另外一個模組中也包含一個名字相同但功能不同的pow()函式時,可以做到完美區分。例如下例,math 和logging 模組都包含 log 函式:

import math, logging
print math.log(10)   
logging.log(10, 'something')  

當然,如果我們覺得math,log,math.pow 這樣的書寫太麻煩,也可以用 如下形式呼叫模組:
from math import pow, sin, log
print pow(2,3), sin(3.141592635), log(10)
但這樣一來,面對同名異意的函式來說就會失效,因為他們的書寫方式都一樣。怎麼辦呢?

來看看下例就清楚了。

from math import log
from logging import log as logger   
print log(10)   
logger(10, 'import from logging')  

還有一種匯入方式是動態模式
如果匯入的模組不存在,Python 直譯器會報 ImportError 錯誤。或者有時兩個不同的模組提供了相同的功能,比如 StringIO 和 cStringIO 都提供了StringIO這個功能。由於同樣的功能,StringIO 是純 Python 程式碼編寫的,而 cStringIO 部分函式是 C 寫的,因此 cStringIO 執行速度更快。這時,我們就需要用動態模式進行呼叫,先呼叫cStringIO 試試看,如果存在,那最好,如果沒有,就用 StringIO 。其書寫方法如下:
try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO
try 的作用是捕獲錯誤,並在捕獲到指定錯誤時執行 except 語句。
上例中呼叫的函式名稱相同,都是StringIO。若不相同怎麼辦呢? 想起來 from logging import log as logger了嗎?對了,只要用 form ... import ... as 將兩個函式名字統一即可。

__future__
Python的新版本會引入新的功能,但是,實際上這些功能在上一個老版本中就已經存在了。要“試用”某一新的特性,就可以通過匯入__future__模組的某些功能來實現。
例如,Python 2.7的整數除法運算結果仍是整數:

>>> 10 / 3
3
但是,Python 3.x已經改進了整數的除法運算,“/”除將得到浮點數,“//”除才仍是整數:
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3

要在Python 2.7中引入3.x的除法規則,匯入__future__的 division:
from __future__ import division
print 10 / 3
輸出結果是 3.3333333333333335。對,沒寫錯,是3.3333333333333335。關於這種奇怪的現象,其實在 Python 和其他幾乎所有現代程式語言,實數不能準確表示。10/3 的表示有一個小錯誤在17小數位。
當新版本的一個特性與舊版本不相容時,該特性將會在舊版本中新增到 __future__ 中,以便舊的程式碼能在舊版本中測試新特性。

建立自己的模組

先看如下例子是怎麼實現模組的建立的。


可以看到,其實和平時定義的函式沒什麼區別,只是在另外一個程式中,直接呼叫定義函式的檔名.py即可。

dir()函式
這裡再介紹一下 dir() 函式,它可以返回模組定義的名稱列表。

該例中先是觀察dir的作用,然後我們定義一個新的變數 day ,再檢驗dir,發現在輸出最後一項增加了一個 'day'。我們使用 del 語句刪除當前模組中的變數/屬性,這個變化再一次反映在dir的輸出中。


安裝第三方模組

一般有兩種語句,一個是 easy_install,一個是 pip ,後者已經內建到 Python 2.7.9 當中。這要求在安裝Python2.7.9時,確認 pip 已經安裝。

例如,現在要安裝一個 web.py 的第三方模組,先從附件中開啟命令提示符,然後在命令提示符中輸入

pip install web.py
如果想查詢其它更多的第三方模組資訊,可以登入 https://pypi.python.org 進行搜尋。