99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Python中的多行注釋文檔編寫風(fēng)格匯總
Python中的多行注釋文檔編寫風(fēng)格匯總
2018-08-10
收藏

Python中的多行注釋文檔編寫風(fēng)格匯總

在Python中利用多行注釋編寫小型的程序文檔說明非常方便,而約定俗成的格式也多種多樣,這里我們就進(jìn)行一下最常見的Python中的多行注釋文檔編寫風(fēng)格匯總:
什么是docstring
在軟件工程中,其實(shí)編碼所占的部分是非常小的,大多是其它的事情,比如寫文檔。文檔是溝通的工具。
在Python中,比較推崇在代碼中寫文檔,代碼即文檔,比較方便,容易維護(hù),直觀,一致。
代碼寫完,文檔也出來了。其實(shí)Markdown也差不多這種思想,文本寫完,排版也完成了。
看看PEP 0257中對(duì)docstring的定義:

A docstring is a string literal that occurs as the first statement in
a module, function, class, or method definition. Such a docstring
becomes the __doc__ special attribute of that object.
簡單來說,就是出現(xiàn)在模塊、函數(shù)、類、方法里第一個(gè)語句的,就是docstring。會(huì)自動(dòng)變成屬性__doc__。    
def foo():
  """ This is function foo"""

可通過foo.__doc__訪問得到' This is function foo'.

各類docstring風(fēng)格:

Epytext

這是曾經(jīng)比較流行的一直類似于javadoc的風(fēng)格。
    
"""
This is a javadoc style.
 
@param param1: this is a first param
@param param2: this is a second param
@return: this is a description of what is returned
@raise keyError: raises an exception
"""

reST

這是現(xiàn)在流行的一種風(fēng)格,reST風(fēng)格,Sphinx的御用格式。我個(gè)人也是喜歡用這種風(fēng)格,比較緊湊。
    
"""
This is a reST style.
 
:param param1: this is a first param
:param param2: this is a second param
:returns: this is a description of what is returned
:raises keyError: raises an exception
"""

Google風(fēng)格    
"""
This is a groups style docs.
 
Parameters:
  param1 - this is the first param
  param2 - this is a second param
 
Returns:
  This is a description of what is returned
 
Raises:
  KeyError - raises an exception
"""

Numpydoc (Numpy風(fēng)格)    
"""
My numpydoc description of a kind
of very exhautive numpydoc format docstring.
 
Parameters
----------
first : array_like
  the 1st param name `first`
second :
  the 2nd param
third : {'value', 'other'}, optional
  the 3rd param, by default 'value'
 
Returns
-------
string
  a value in a string
 
Raises
------
KeyError
  when a key error
OtherError
  when an other error
"""

docstring工具之第三方庫pyment

用來創(chuàng)建和轉(zhuǎn)換docstring.
使用方法就是用pyment生成一個(gè)patch,然后打patch。    
$ pyment test.py      #生成patch
$ patch -p1 < test.py.patch #打patch

詳情:https://github.com/dadadel/pyment

使用sphinx的autodoc自動(dòng)從docstring生產(chǎn)api文檔,不用再手寫一遍

我在代碼中已經(jīng)寫過docstring了,寫api文檔的內(nèi)容跟這個(gè)差不多,難道要一個(gè)一個(gè)拷貝過去rst嗎?當(dāng)然不用。sphinx有autodoc功能。
首先編輯conf.py文件,
1. 要有'sphinx.ext.autodoc'這個(gè)extensions
2. 確保需要自動(dòng)生成文檔的模塊可被import,即在路徑中。比如可能需要sys.path.insert(0, os.path.abspath(‘../..'))

然后,編寫rst文件,    
xxx_api module
---------------------
 
.. automodule:: xxx_api
  :members:
  :undoc-members:
  :show-inheritance:
敲make html命令,就可以從docstring中生成相關(guān)的文檔了,不用多手寫一遍rst.

看效果:

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }