1、第一個案例 >> > def median(pool): '''Statistical median to demonstrate doctest. >>> median([2, 9, 9, 7, 9, 2, 4, 5, 8]) 7 ''' # 代碼的文檔,功能說明。如果運行以上參數 # pool=[2, 9, 9, 7, 9, 2, 4, 5, 8] # 期望結果是7 copy = sorted(pool) size = len(copy) if size % 2 == 1: return copy[(size-1)/2] else : return (copy[size/2-1] + copy[size/2])/2 >>> if __name__ == '__main__': import doctest doctest.testmod() 語句doctest.testmod() 用於測試,比較命令行(交互式)運行 >> > median([2, 9, 9, 7, 9, 2, 4, 5, 8]) 和調用函數運行median(pool) 獲取的結果是否爲對應,一致的話不報錯 將[2, 9, 9, 7, 9, 2, 4, 5, 8] 改爲[2, 9, 9, 7, 9, 2, 4, 5, 8],運行結果如下: doctest模塊在程序說明中尋找看起來像python交互程序的字符串,然後把這些字符串作爲python代碼運行,驗證他們運行後是否得到想要的結果。這裏有3種需求會用到doctest。 1. 驗證模塊(例如,方法)中的文檔或說明書是否得及時更新。 2. 執行迴歸測試(regression test)。 3. 寫培訓文檔,或說明文檔,有點程序可讀性測試的味道。 總之,doctest按文檔中的指令執行,其實就是按照預先給定的參數執行該模塊,然後對比實際輸出結果是否與說明中的結果一致。其結果就反映了以上3個方面, 1,有可能程序正確,文檔說明沒有及時更新; 2,修改後的程序有bug; 3,由於程序的執行結果與文檔說明中的不一致,很可能導致讀者困惑,程序可讀性受影響 第二個案例: # !/usr/bin/env python # -*- coding: utf-8 -*- def factorial(n): '''Return the factorial of n, an exact integer >= 0. If the result is small enough to fit in an int, return an int. Else return a long. >>> [factorial(n) for n in range(6)] #看看python的語法就是這麼簡潔 [1, 1, 2, 6, 24, 120] >>> [factorial(long(n)) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> factorial(30) 265252859812191058636308480000000L >>> factorial(30L) 265252859812191058636308480000000L >>> factorial(-1) Traceback (most recent call last): ... ValueError: n must be >= 0 Factorials of floats are OK, but the float must be an exact integer: >>> factorial(30.1) Traceback (most recent call last): ... ValueError: n must be exact integer >>> factorial(1e100) Traceback (most recent call last): ... OverflowError: n too large ''' # 三引號引起來的字都是說明 import math if not n >= 0: raise ValueError("n must be >= 0") if math.floor(n) != n: raise ValueError("n must be exact integer") if n + 1 == n: # cache a value like le300 raise OverflowError("n too large") result = 1 factor = 2 while factor <= n: result *= factor factor += 1 return result if __name__ == "__main__": import doctest doctest.testmod()
Python編程之Python doctest
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.