最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

介紹Python中的文檔測(cè)試模塊

 更新時(shí)間:2015年04月28日 11:33:17   作者:廖雪峰  
這篇文章主要介紹了Python中的文檔測(cè)試模塊,代碼基于Python2.x版本,需要的朋友可以參考下

如果你經(jīng)常閱讀Python的官方文檔,可以看到很多文檔都有示例代碼。比如re模塊就帶了很多示例代碼:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'

可以把這些示例代碼在Python的交互式環(huán)境下輸入并執(zhí)行,結(jié)果與文檔中的示例代碼顯示的一致。

這些代碼與其他說明可以寫在注釋中,然后,由一些工具來自動(dòng)生成文檔。既然這些代碼本身就可以粘貼出來直接運(yùn)行,那么,可不可以自動(dòng)執(zhí)行寫在注釋中的這些代碼呢?

答案是肯定的。

當(dāng)我們編寫注釋時(shí),如果寫上這樣的注釋:

def abs(n):
  '''
  Function to get absolute value of number.

  Example:

  >>> abs(1)
  1
  >>> abs(-1)
  1
  >>> abs(0)
  0
  '''
  return n if n >= 0 else (-n)

無疑更明確地告訴函數(shù)的調(diào)用者該函數(shù)的期望輸入和輸出。

并且,Python內(nèi)置的“文檔測(cè)試”(doctest)模塊可以直接提取注釋中的代碼并執(zhí)行測(cè)試。

doctest嚴(yán)格按照Python交互式命令行的輸入和輸出來判斷測(cè)試結(jié)果是否正確。只有測(cè)試異常的時(shí)候,可以用...表示中間一大段煩人的輸出。

讓我們用doctest來測(cè)試上次編寫的Dict類:

class Dict(dict):
  '''
  Simple dict but also support access as x.y style.

  >>> d1 = Dict()
  >>> d1['x'] = 100
  >>> d1.x
  100
  >>> d1.y = 200
  >>> d1['y']
  200
  >>> d2 = Dict(a=1, b=2, c='3')
  >>> d2.c
  '3'
  >>> d2['empty']
  Traceback (most recent call last):
    ...
  KeyError: 'empty'
  >>> d2.empty
  Traceback (most recent call last):
    ...
  AttributeError: 'Dict' object has no attribute 'empty'
  '''
  def __init__(self, **kw):
    super(Dict, self).__init__(**kw)

  def __getattr__(self, key):
    try:
      return self[key]
    except KeyError:
      raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

  def __setattr__(self, key, value):
    self[key] = value

if __name__=='__main__':
  import doctest
  doctest.testmod()

運(yùn)行python mydict.py:

$ python mydict.py

什么輸出也沒有。這說明我們編寫的doctest運(yùn)行都是正確的。如果程序有問題,比如把__getattr__()方法注釋掉,再運(yùn)行就會(huì)報(bào)錯(cuò):

$ python mydict.py
**********************************************************************
File "mydict.py", line 7, in __main__.Dict
Failed example:
  d1.x
Exception raised:
  Traceback (most recent call last):
   ...
  AttributeError: 'Dict' object has no attribute 'x'
**********************************************************************
File "mydict.py", line 13, in __main__.Dict
Failed example:
  d2.c
Exception raised:
  Traceback (most recent call last):
   ... 
  AttributeError: 'Dict' object has no attribute 'c'
**********************************************************************

注意到最后兩行代碼。當(dāng)模塊正常導(dǎo)入時(shí),doctest不會(huì)被執(zhí)行。只有在命令行運(yùn)行時(shí),才執(zhí)行doctest。所以,不必?fù)?dān)心doctest會(huì)在非測(cè)試環(huán)境下執(zhí)行。
小結(jié)

doctest非常有用,不但可以用來測(cè)試,還可以直接作為示例代碼。通過某些文檔生成工具,就可以自動(dòng)把包含doctest的注釋提取出來。用戶看文檔的時(shí)候,同時(shí)也看到了doctest。

相關(guān)文章

  • 深入淺析Django MTV模式

    深入淺析Django MTV模式

    Django是基于MTV模式的框架,需要配合url控制器(路徑分發(fā))使用,本文重點(diǎn)給大家介紹Django MTV模式詳解,需要的朋友參考下吧
    2021-09-09
  • python模塊引入問題和解決方案

    python模塊引入問題和解決方案

    本文主要介紹了python模塊引入問題和解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • django實(shí)現(xiàn)用戶登陸功能詳解

    django實(shí)現(xiàn)用戶登陸功能詳解

    這篇文章主要介紹了django實(shí)現(xiàn)用戶登陸功能詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • python中l(wèi)ist,ndarray,Tensor間的轉(zhuǎn)換小結(jié)

    python中l(wèi)ist,ndarray,Tensor間的轉(zhuǎn)換小結(jié)

    數(shù)據(jù)類型轉(zhuǎn)換是常見的功能,本文主要介紹了python中l(wèi)ist,ndarray,Tensor間的轉(zhuǎn)換小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • PyCharm最新激活碼(2020/10/27全網(wǎng)最新)

    PyCharm最新激活碼(2020/10/27全網(wǎng)最新)

    Pycharm最新激活碼全網(wǎng)最新(2020/10/27更新),適用Intellij idea 2020.2.x,WebStorm 2020.2.x,Pycharm 2020.2.x
    2020-10-10
  • 如何在python中使用selenium的示例

    如何在python中使用selenium的示例

    這篇文章主要介紹了如何在python中使用selenium的示例,selenium提供了一個(gè)通用的接口,可模擬用戶來操作瀏覽器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 利用Python的folium包繪制城市道路圖的實(shí)現(xiàn)示例

    利用Python的folium包繪制城市道路圖的實(shí)現(xiàn)示例

    這篇文章主要介紹了利用Python的folium包繪制城市道路圖的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • PyTorch之torch.randn()如何創(chuàng)建正態(tài)分布隨機(jī)數(shù)

    PyTorch之torch.randn()如何創(chuàng)建正態(tài)分布隨機(jī)數(shù)

    這篇文章主要介紹了PyTorch之torch.randn()如何創(chuàng)建正態(tài)分布隨機(jī)數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python 面向?qū)ο缶幊痰娜筇匦灾^承

    Python 面向?qū)ο缶幊痰娜筇匦灾^承

    繼承也是面向?qū)ο缶幊倘筇匦灾?,本篇文章我們就來學(xué)習(xí)Python中繼承的用處、使用場(chǎng)景及用與不用的區(qū)別,感興趣的朋友一起來閱讀下面文章吧
    2021-09-09
  • Python讓列表逆序排列的3種方式小結(jié)

    Python讓列表逆序排列的3種方式小結(jié)

    這篇文章主要介紹了Python讓列表逆序排列的3種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論

柳林县| 建宁县| 屯昌县| 普兰店市| 孟津县| 卓资县| 泰顺县| 上饶县| 哈巴河县| 桐城市| 综艺| 黄石市| 连云港市| 桃园市| 大安市| 博白县| 凤凰县| 山西省| 罗田县| 广州市| 萝北县| 麻城市| 天峻县| 米林县| 平南县| 新乡县| 台中县| 太原市| 开江县| 阿克陶县| 乐东| 晋中市| 杭州市| 扎鲁特旗| 崇信县| 黎城县| 彰化市| 遂宁市| 海安县| 紫阳县| 革吉县|