精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python開發者面向文檔編程的正確姿勢

開發 后端
很多人沒有寫注釋的習慣,大多數不是因為懶惰,一方面是沒有意識到寫文檔的好處,另一方面是不了解這方面的工具。畢竟從管理上依賴于人的主動性是遠不如依賴于工具有效的。本文介紹如何利用Python注釋提升文檔書寫的質量以及效率的小技巧。

[[201382]]

概述

秦人不暇自哀,而后人哀之;后人哀之而不鑒之,亦使后人而復哀后人也! –論面向文檔編程的重要性

如果想看見識一個人寫代碼的功力,注釋其實是區分老司機和小鮮肉的一個顯著的分界線(有沒有觀察到你們公司的領導基本都在開會或者寫文檔),通常情況下老司機的文檔量與代碼量是1:1的比例,而新人往往認為寫完功能模塊就已經可以完成任務了。生產環境中需要面對現實中大量復雜的業務邏輯和數據校驗并與各方對接,文檔質量和代碼質量就被提升到了相同的高度。很多人沒有寫注釋的習慣,大多數不是因為懶惰,一方面是沒有意識到寫文檔的好處,另一方面是不了解這方面的工具。畢竟從管理上依賴于人的主動性是遠不如依賴于工具有效的。本文介紹如何利用Python注釋提升文檔書寫的質量以及效率的小技巧。

Python

在實際生產中,機器學習工作現在看起來,白天像是個算法工程師的活,晚上就變成運維+測試了。Python 一直以來也都受到測試工程師和運維工程師的偏愛,下面是幾個經典的注釋活用case。

用注釋寫單元測試:doctest

 

單元測試是代碼開發環節必不可少的一環,對于Bug定位和代碼質量而言是非常重要的。現在最廣為人知的單元測試框架就是Unittest,它借鑒了Java中成熟的單元測試框架的JUnit。即使像Django還對這個框架有特殊的支持,然而在實現Unittest的時候會感覺確實比較啰嗦,setup,teardown…在維護單元測試的時候很多時候感覺力不從心。

一個巧妙的方式可以是通過doctest,用docstring注釋的方式來完成單元測試,由于每個方法def下面都先跟著一段測試用例,然后緊跟著就是代碼正文,這樣一來很方便我們測試現有代碼的質量,另一方面又便于修改。

舉個例子:

  1. def factorial(n): 
  2.  
  3.     """Return the factorial of n, an exact integer >= 0. 
  4.  
  5.   
  6.  
  7.     >>> [factorial(n) for n in range(6)] 
  8.  
  9.     [1, 1, 2, 6, 24, 120] 
  10.  
  11.     >>> factorial(30) 
  12.  
  13.     265252859812191058636308480000000 
  14.  
  15.     >>> factorial(-1) 
  16.  
  17.     Traceback (most recent call last): 
  18.  
  19.         ... 
  20.  
  21.     ValueError: n must be >= 0 
  22.  
  23.   
  24.  
  25.     Factorials of floats are OK, but the float must be an exact integer
  26.  
  27.     >>> factorial(30.1) 
  28.  
  29.     Traceback (most recent call last): 
  30.  
  31.         ... 
  32.  
  33.     ValueError: n must be exact integer 
  34.  
  35.     >>> factorial(30.0) 
  36.  
  37.     265252859812191058636308480000000 
  38.  
  39.   
  40.  
  41.     It must also not be ridiculously large: 
  42.  
  43.     >>> factorial(1e100) 
  44.  
  45.     Traceback (most recent call last): 
  46.  
  47.         ... 
  48.  
  49.     OverflowError: n too large 
  50.  
  51.     ""
  52.  
  53.   
  54.  
  55.     import math 
  56.  
  57.     if not n >= 0: 
  58.  
  59.         raise ValueError("n must be >= 0"
  60.  
  61.     if math.floor(n) != n: 
  62.  
  63.         raise ValueError("n must be exact integer"
  64.  
  65.     if n+1 == n:  # catch a value like 1e300 
  66.  
  67.         raise OverflowError("n too large"
  68.  
  69.     result = 1 
  70.  
  71.     factor = 2 
  72.  
  73.     while factor <= n: 
  74.  
  75.         result *= factor 
  76.  
  77.         factor += 1 
  78.  
  79.     return result 
  80.  
  81.   
  82.  
  83.   
  84.  
  85. if __name__ == "__main__"
  86.  
  87.     import doctest 
  88.  
  89.     doctest.testmod()  

上面是官網提供的一個求N的階乘函數示例,在docstring 中通過 >>>符號來開始一個單元測試,之后換行輸入預期結果即可。實際上就是復制粘貼一下調試過程和結果,真的再簡單不過了,想實現TDD也因此變得非常輕松。

用注釋寫API文檔:apidoc 

 

在我們完成機器學習模型后,想要提供一個對外服務的接口以貢獻我們的算力時就需要完備的API文檔,也是通過API的調用才能為我們的模型提供源源不斷的校驗數據,對于提升模型效果有非常實際的意義。對大多數人而言調用API來完成開發都是一件比較開心的事情,因為我們可以少做很多工作就可以實現強大功能。然而,當我們需要對外提供API時就要面臨不一樣的考驗了,接口鑒權、接口設計、版本控制、并發問題、日志埋點…這些都是需要面對的新問題,而利用 apidoc 可以很好地解決這些API文檔中常見的諸多問題,相當于通過模板提升了我們的接口設計的能力。

apidoc為Python提供了一種類似于 docstring 的方式來寫API文檔,從語法上看比較類似于 R中的roxygen,都需要用戶以 @xxx 符號作為一個開頭,隨后書寫相關的定義和功能。

舉個例子:

下面是一個API接口的定義方法,最核心的部分就是

  1. 路由
  2. GET/POST方法
  3. 名稱/分組
  4. 參數與調用例子

(這年頭沒有用例的代碼都是耍流氓)

  1. ""
  2.  
  3. @api {get} /user/:id Request User information 
  4.  
  5. @apiName GetUser 
  6.  
  7. @apiGroup User    
  8.  
  9. @apiParam {Number} id Users unique ID.   
  10.  
  11. @apiSuccess {String} firstname Firstname of the User
  12.  
  13. @apiSuccess {String} lastname  Lastname of the User
  14.  
  15. "" 

我們可以直接擼一個官方示例來學習如何使用apidoc。

首先,下載示例源碼

  1. git clone https://github.com/apidoc/apidoc 
  2.  
  3. cd apidoc  

然后,安裝 apidoc 組件

  1. sudo npm install apidoc -g 

接著,利用官方代碼來制作一個例子,并且訪問即可。

  1. apidoc -i example/ -o output/ -t template/ 
  2.  
  3. open output/index.html  

幾個參數的含義如下:

-i:input,表示輸入的文件夾

-o:output,表示輸出文件夾

-t:template,表示模板文件,通過替換模板我們可以修改文檔皮膚

在 example 文件夾下,我們需要在apidoc.json 中填寫配置文件,定義文檔的header和footer部分內容,其余的文件會被自動識別出其中的docstring作為API文檔的一部分。

由于apidoc的官方文檔非常簡單清晰,所以這里不過多強調語法。

 

apidoc 還為我們提供了接口調試的功能,在實際使用的時候要注意:

我們需要一個web server 才可以使用這個接口調試的功能

要注意跨域的問題。 

 

通過版本對比,我們還可以快速排查API接口的變化情況。需要注意的是這個功能要求我們要將歷史的文檔記錄也要保存在該目錄下的文件中,通常我們可以把歷史的注釋輸出到一個特定文件中保存。

總的來說,雖然,API文檔的書寫并不是一件難度非常高的事情,卻能體現系統模塊設計和用戶體驗設計的功力,我們應該對那些無代碼示例,無版本控制的API文檔say no!

用注釋寫命令行接口:docopt

利用docopt,我們可以在注釋中直接聲明文件的命令行傳入參數,而不需要通過 argvs變量來捕獲輸入值再做判斷,這在調用運維腳本或者若干任務調度腳本的時候尤其管用,極大地提升了CLI的效率。

舉個例子:(此處代碼僅供參考)

  1. """Usage: 
  2.  
  3.   fiannceR.py tcp <host> <port> [--timeout=<seconds>] 
  4.  
  5.   fiannceR.py serial <port> [--baud=9600] [--timeout=<seconds>] 
  6.  
  7.   fiannceR.py -h | --help | --version 
  8.  
  9.   
  10.  
  11. ""
  12.  
  13. from docopt import docopt 
  14.  
  15.   
  16.  
  17. if __name__ == '__main__'
  18.  
  19.     arguments = docopt(__doc__, version='0.1.1rc'
  20.  
  21.     print(arguments)  
  1. fiannceR.py tcp 0.0.0.0 3838 

這里的 arguments 將傳出一個字典對象,以Key-Value的形式將命令行中的輸入值捕獲。

  1. {'--baud': None, 
  2.  
  3. '--help'False
  4.  
  5. '--timeout': None, 
  6.  
  7. '--version'False
  8.  
  9. '-h'False
  10.  
  11. '<host>''0.0.0.0'
  12.  
  13. '<port>''3838'
  14.  
  15. 'serial'False
  16.  
  17. 'tcp'True 

總結

如果真的要從數據擼到模型、接口,那么一排注釋的畫面真是美得不敢想象。

  1. """unitest 
  2.  
  3. >>> FinanceR('20161001'
  4.  
  5. 21.01 
  6.  
  7. ""
  8.  
  9. def FinanceR(date): 
  10.  
  11.     price = get_price(date
  12.  
  13.     return(price) 
  14.  
  15.   
  16.  
  17. class(BaseHandler): 
  18.  
  19.     def get(self):    
  20.  
  21.         """apidoc 
  22.  
  23.            @api {get} /price/:date 獲取當前價格 
  24.  
  25.            @apiName GetPrice 
  26.  
  27.            @apiGroup Quota 
  28.  
  29.   
  30.  
  31.            @apiParam {Number} date 交易日期 
  32.  
  33.   
  34.  
  35.            @apiSuccess {String} price 
  36.  
  37.         ""
  38.  
  39.         date = self.get_argument('date',None) 
  40.  
  41.         try: 
  42.  
  43.             price = FinanceR(date
  44.  
  45.             self.write({'data':{'price':price},'response':{'message':'success','code':200}}) 
  46.  
  47.         except Exception as e: 
  48.  
  49.             self.write({'data':None,'response':{'message':str(e),'code':404}}) 
  50.  
  51.              
  52.  
  53. """Usage: 
  54.  
  55.   fiannceR.py tcp <host> <port> [--timeout=<seconds>] 
  56.  
  57.   fiannceR.py serial <port> [--baud=9600] [--timeout=<seconds>] 
  58.  
  59.   fiannceR.py -h | --help | --version 
  60.  
  61.   
  62.  
  63. ""
  64.  
  65. from docopt import docopt 
  66.  
  67.   
  68.  
  69. if __name__ == '__main__'
  70.  
  71.     arguments = docopt(__doc__, version='0.1.1rc'
  72.  
  73.     print(arguments)  

歡迎大家留言討論,給出更多應用案例,交流分享。

參考文獻

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2016-11-08 20:57:51

文檔型語言編程利器

2024-07-03 12:09:08

2016-08-12 11:33:21

PythonRstudio編輯器

2019-01-16 18:22:24

機器學習人工智能計算機

2012-06-13 01:23:30

開發者程序員

2018-11-23 09:07:00

Linux開發者書籍

2018-11-23 11:50:02

Linux開發者編程書籍

2021-04-13 08:00:00

開發文檔編碼

2020-09-04 15:38:19

Web前端開發項目

2009-03-24 08:51:30

YUIJavaJavascript

2019-08-27 09:08:52

后端隊列系統

2013-07-12 09:39:44

SDK經濟學移動開發者B2D

2015-09-15 16:10:45

PythonPython 開發Docker

2017-01-15 17:48:04

Java開發者編程語言

2017-09-07 08:40:34

華為

2017-11-07 09:49:21

開發者華為SAP HANA

2016-12-26 17:53:05

Java開發者編程語言

2017-02-05 16:00:35

Java編程語言

2015-07-10 15:57:24

惠普開發者測試

2020-06-22 07:53:21

編程工具Web 開發編程語言
點贊
收藏

51CTO技術棧公眾號

白白在线精品| 亚洲国产福利| 成人免费视频一区二区| 日韩美女在线观看| 国精产品一区一区| 中文无码日韩欧| 欧美午夜丰满在线18影院| 色综合视频二区偷拍在线| 国产露脸国语对白在线| 国产日韩欧美| 久久久精品在线| 亚洲调教欧美在线| 欧美三级一区| 日本精品视频一区二区| 黄色片免费在线观看视频| 日韩欧美电影在线观看| 精品一区二区三区香蕉蜜桃| 午夜精品一区二区三区在线视 | 色免费在线视频| 国产成人无吗| 国产日韩欧美高清| 国产精品伊人日日| 国产又粗又大又爽| 久久亚洲精品伦理| 久久久久免费视频| 91成年人网站| 97人人澡人人爽91综合色| 欧美视频自拍偷拍| 男人的天堂99| av中文字幕在线看| 亚洲精品国产无天堂网2021| 色播亚洲婷婷| 久久精品色图| av在线播放不卡| 亚洲一区二区免费在线| 在线免费看毛片| 久久久水蜜桃av免费网站| 欧美激情一级二级| 欧美性猛交xxxxx少妇| 欧美成人精品一区二区三区在线看| 欧美日韩国产综合视频在线观看中文 | 日韩三级久久久| 国产成人1区| 日韩高清人体午夜| 精品人妻在线视频| 警花av一区二区三区| 欧美日韩综合不卡| 天天爽人人爽夜夜爽| 成人免费福利| 色婷婷亚洲精品| 99色精品视频| 不卡一二三区| 日韩欧美国产黄色| 农村妇女精品一二区| 性国裸体高清亚洲| 欧美日韩一区二区在线播放| 日韩视频在线视频| 狠狠操一区二区三区| 亚洲国产精品一区二区久久 | 国产精品探花一区二区在线观看| 丁香花电影在线观看完整版| 亚洲欧美日韩在线不卡| 一区二区精品免费视频| 无遮挡动作视频在线观看免费入口| 国产成人在线免费| 99久久精品免费看国产一区二区三区 | 欧美日韩成人激情| www.这里只有精品| 国模大尺度视频一区二区| 91精品国产综合久久精品性色| av在线播放亚洲| 末成年女av片一区二区下载| 欧美日韩在线免费观看| 欧美成人精品欧美一级乱| 免费观看成人性生生活片| 在线视频中文字幕一区二区| 国产色视频在线播放| 精品国产乱码久久久久久樱花| 精品高清一区二区三区| 国产精品亚洲a| 国产资源一区| 亚洲成人网久久久| 中文字幕免费视频| 亚洲午夜精品一区 二区 三区| 日韩高清不卡av| 大胸美女被爆操| 香蕉视频国产精品| 97精品国产aⅴ7777| 一级特黄免费视频| 国产福利精品导航| 麻豆av一区二区三区| 美女国产在线| 偷拍日韩校园综合在线| 亚洲黄色小视频在线观看| 国色天香久久精品国产一区| 日韩精品在线看| 精品在线观看一区| 99亚洲一区二区| 国产日韩在线看片| 亚洲欧美日韩动漫| 最近中文字幕一区二区三区| 亚洲乱码中文字幕久久孕妇黑人| 国产理论在线| 在线观看亚洲一区| 日本久久久久久久久久| 欧美在线观看视频一区| 久久久免费精品| 一级黄色片视频| 91麻豆.com| 天堂а√在线中文在线| 高清av一区二区三区| 亚洲电影在线看| 爱爱视频免费在线观看| 日韩不卡一区二区| 国外成人在线视频网站| 91麻豆一二三四在线| 欧美在线观看你懂的| 欧美一区二区免费在线观看| 五月天久久777| 国产精品激情av电影在线观看| 免费观看日批视频| 福利91精品一区二区三区| 亚洲一区二区三区色| 都市激情综合| 亚洲国产高清高潮精品美女| 精品国产乱码久久久久久鸭王1| 精品电影一区| 91精品国产综合久久久久久久久 | 精品国产乱子伦一区| 91麻豆制片厂| 久久久xxx| 精品一卡二卡三卡四卡日本乱码 | 一区二区视频免费观看| 99国产精品99久久久久久| 在线观看成人免费| 国产精品亚洲四区在线观看| 日韩中文字幕久久| 国产又粗又猛视频免费| 国产精品天干天干在观线| 成人黄色一区二区| 国内黄色精品| 国产精品黄视频| eeuss影院在线观看| 欧洲另类一二三四区| 久久美女免费视频| 水蜜桃久久夜色精品一区的特点| 成人高清视频观看www| 第一福利在线| 欧美三级日韩在线| 91ts人妖另类精品系列| 另类的小说在线视频另类成人小视频在线 | 国产成人av电影免费在线观看| 亚洲专区国产精品| 国产成人l区| 精品久久久三级丝袜| 黄色一级视频免费| 成人美女视频在线看| 国内精品在线观看视频| 久久香蕉精品香蕉| 欧美一级bbbbb性bbbb喷潮片| 中文字幕观看在线| 国产精品免费av| 欧美成人手机在线视频| 欧美成熟视频| 国产精品二区三区四区| 超碰高清在线| 国产亚洲一区精品| 国产裸体永久免费无遮挡| 一区二区三区在线观看欧美| 欧美大喷水吹潮合集在线观看| 香蕉久久精品| 国产精品电影观看| 蜜桃视频在线观看www社区 | 亚洲字幕av一区二区三区四区| 日本欧美大码aⅴ在线播放| 亚洲成人网上| 日本免费一区二区三区视频| 欧美精品videos性欧美| 免费理论片在线观看播放老| 欧美日韩在线三区| 九九热这里有精品视频| 2024国产精品| 午夜激情视频网| 99热这里只有精品8| 亚洲精品一区二区三区四区五区| 丁香花在线观看完整版电影| 日韩精品一区二区视频| 97精品人妻一区二区三区在线| av男人天堂一区| 久久久精品麻豆| 国产综合婷婷| 日韩欧美手机在线| 91大神精品| 国产精品自产拍在线观| av3级在线| 久久久国产精品视频| 丝袜+亚洲+另类+欧美+变态| 69堂精品视频| 国产毛片aaa| 亚洲欧洲中文日韩久久av乱码| 一女二男3p波多野结衣| 亚洲黄色影院| 91视频成人免费| 加勒比久久综合| 91久久极品少妇xxxxⅹ软件 | 国产欧美日韩影院| 超碰97在线播放| 久久婷婷五月综合色丁香| 91成人在线视频| 在线三级电影| 最近日韩中文字幕中文| 免费观看的毛片| 欧美高清激情brazzers| 精品国产xxx| 亚洲国产成人av好男人在线观看| 男人午夜视频在线观看| 欧美中文字幕| 欧美成人精品免费| 91精品国产成人观看| 日韩av电影免费在线| 国产精品超碰| 99精彩视频在线观看免费| 伊人久久一区| 国产精品无码专区在线观看| 国产不卡网站| 性色av一区二区咪爱| 免费黄色在线看| 中文字幕国产精品| 欧美日韩国产亚洲沙发| 日韩二区三区在线| 亚洲 国产 欧美 日韩| 亚洲高清久久网| 99er热精品视频| 制服丝袜中文字幕亚洲| 中文字幕人妻丝袜乱一区三区| 亚洲色图欧洲色图婷婷| 国产精成人品免费观看| 久久久久久综合| www.中文字幕av| 国产福利电影一区二区三区| 伊人免费视频二| 国产一区二区三区av电影| 999在线精品视频| 成人久久久精品国产乱码一区二区 | 性欧美18xxxhd| 欧美成在线视频| а天堂中文在线官网| 久久躁日日躁aaaaxxxx| 黄色成人影院| 日韩一区二区久久久| 在线免费观看黄色av| 色偷偷9999www| 免费黄色在线观看| 久操成人在线视频| 福利成人导航| 51视频国产精品一区二区| 小早川怜子影音先锋在线观看| 日韩三级影视基地| av免费在线观| 欧美激情精品久久久久久蜜臀| 每日更新在线观看av| 亚洲日本aⅴ片在线观看香蕉| 国产乱叫456在线| 日韩精品一区二区三区视频| 国产黄色片av| 亚洲第一精品夜夜躁人人躁| 亚洲av成人精品日韩在线播放| 91精品国产全国免费观看| 国产精品特级毛片一区二区三区| 欧美日韩一区二区免费视频| 蜜臀99久久精品久久久久小说| 一区二区激情小说| 日韩av免费网址| 一本一本大道香蕉久在线精品| 欧美人妻一区二区| 午夜a成v人精品| 日本视频免费观看| 91麻豆精品国产综合久久久久久| 伊人网免费视频| 欧美xxxx在线观看| 欧美亚洲日本| 久久在线精品视频| 中文字幕色婷婷在线视频| 国产美女久久精品香蕉69| 国产精品久久久久久久久久久久久久久| 欧美亚洲另类激情另类| 高清在线一区| 国产欧美一区二区三区另类精品 | 精品一区久久久| re久久精品视频| 男人c女人视频| 久久精品男女| 伊人成人免费视频| 91蜜桃在线观看| 欧美又粗又大又长| 欧美性色黄大片| 五月天婷婷在线播放| 久久精品国产亚洲精品| 妞干网免费在线视频| 91久久国产婷婷一区二区| 农村少妇一区二区三区四区五区 | 国产精品黄页免费高清在线观看| 天堂av中文在线观看| 91免费观看网站| 精品一区亚洲| 国产一区 在线播放| 蜜桃视频一区二区| 魔女鞋交玉足榨精调教| 亚洲欧美激情插| 天天综合久久综合| 亚洲加勒比久久88色综合| www久久日com| 国产精品亚洲美女av网站| 最近国产精品视频| 国产极品在线视频| 国产剧情一区二区| 亚洲精品电影院| 91精品1区2区| 每日更新在线观看av| 亚洲**2019国产| 成人三级av在线| 91网站在线观看免费| 韩国午夜理伦三级不卡影院| 99在线视频免费| 在线观看91视频| 九色视频网站在线观看| 91国内免费在线视频| 岛国精品一区| 国产一区二区三区乱码| 国产成人精品免费| 澳门黄色一级片| 欧美一区二区播放| 国产淫片在线观看| 亚洲a在线观看| 久久久久久影院| 亚洲一区二区偷拍| 亚洲三级在线观看| 国产精品久久久久久在线| 色偷偷偷亚洲综合网另类| 91精品国产66| 在线精品日韩| 国产毛片精品视频| 国产黄色片在线免费观看| 日韩欧美视频在线| 日本三级在线观看网站| 99九九电视剧免费观看| 黄色成人av网站| 性囗交免费视频观看| 黄色成人在线播放| 日本在线视频1区| 国产91色在线|| 日韩国产一区二区三区| 蜜桃福利午夜精品一区| 亚洲欧美视频在线观看| 亚洲美女福利视频| 2019中文字幕在线| 国产一区二区三区电影在线观看 | 成人精品小蝌蚪| 久久久无码精品亚洲国产| 亚洲成人黄色网址| 新版的欧美在线视频| 亚洲高清在线观看一区| 韩国理伦片一区二区三区在线播放| 国产传媒第一页| 欧美网站一区二区| 国产在线看片| 国产伦精品一区二区三区在线| 亚洲理论电影网| 9191在线视频| 岛国视频午夜一区免费在线观看| 99久久精品无免国产免费| 欧美成人免费小视频| 国产精品17p| 日本成人中文字幕在线| 亚洲欧美在线另类| 欧美一区二区黄片| 国产精品成人品| 欧美+日本+国产+在线a∨观看| 色播五月综合网| 亚洲免费观看高清完整版在线观看熊| 中文永久免费观看| 久久综合电影一区| 清纯唯美亚洲经典中文字幕| 麻豆三级在线观看| 亚洲一区二区精品视频| 国产小视频免费在线网址| 国产免费一区视频观看免费| 亚洲大片在线| 自拍偷拍第9页| 日韩精品在线视频观看| **日韩最新| 青青草原成人网| 一区二区三区自拍| 国产一级免费在线观看| 99re国产视频| 日韩精品乱码av一区二区| 国产一二三四在线| 啊v视频在线一区二区三区| 久久午夜影院| 永久免费看片在线观看|