Python代碼編寫規(guī)范(適合于小團體,低強度)

正文之前

這篇文是我跟師兄協(xié)定以后寫代碼的一些規(guī)范,雖然麻煩,但是對于后續(xù)的復查以及代碼延續(xù)都有很大的好處的。

武漢歡樂谷自己拍的圖,后期也調(diào)了下。哈哈哈~

正文

必須統(tǒng)一的

文件頭

寫入作者姓名,文件作用

"""
###################### File Introduction ######################
* Author: ZZB
* Function:這個文件主要用于定義中文拆分的一些函數(shù)和文件讀寫
######################*******************######################
"""

函數(shù)規(guī)范

  • Function: 寫出該函數(shù)的作用,標準為:接受XXX的調(diào)用(可有可無,視功能而定),傳入XXX參數(shù),返回XXX

  • Args:列出每個參數(shù)的名字, 并在名字后使用一個冒號和一個空格, 分隔對該參數(shù)的描述.如果描述太長超過了單行80字符,使用2或者4個空格的懸掛縮進(與文件其他部分保持一致). 描述應該包括所需的類型和含義. 如果一個函數(shù)接受foo(可變長度參數(shù)列表)或者bar (任意關鍵字參數(shù)), 應該詳細列出foobar.

  • Returns: (或者 Yields: 用于生成器)描述返回值的類型和語義. 如果函數(shù)返回None, 這一部分可以省略.

  • Raises:列出與接口有關的所有異常(這一部分如果有,就寫清楚,沒有就ignore).

"""
###################
# * function:這個get_radical函數(shù)用于接受中文字符串,返回拆解的偏旁數(shù)組
# * args:(Chinses_string)
#   * Chinses_string:中文字符串
# * return radicals
#   * radicals是一個偏旁組成的數(shù)組[a,b,c,d,e]
# * raise:未設置異常檢測
###################
"""

def get_radical(Chinses_string)
    ......
    return radicals

TODO注釋

TODO注釋應該在所有開頭處包含”TODO”字符串, 另外必須添加后續(xù)需要做的功能及其設想,以及可選的下列信息:

  • TODO填寫人
  • 后續(xù)工作完成者
  • email
# TODO
# Submiter:張照博
# Complete:唐訓祝
# Email:zzb@hust.edu.cn

def get_radical(Chinese_string)
    pass

代碼日志

在主運行程序下,把所有有意義的(篇幅不大,便于人閱讀的)中間結果write到一個log的日志文件里面去。同時建議以時間和當前文件名作為log日志的文件名。示例如下:

"""
# ###################在文件開頭加這些就OK了###################
import os
import time
path = os.path.basename(__file__)
time = time.strftime("%Y-%m-%d-%H-%M", time.localtime())
log = open("log/"+path[:path.find('.')]+time+".log",'w',encoding='utf8')
# ###################*************************###################
"""

ram_range=(1,1) #表示 
unigram, ngram_range=(2,2) #表示 
bigram, ngram_range=(3,3) #表示 thirgram
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba

data = ["為了祖國,為了勝利,向我開炮!向我開炮!",
        "記者:你怎么會說出那番話",
        "我只是覺得,對準我自己打"]
data = [" ".join(jieba.lcut(e)) for e in data]         # 分詞,并用" "連接
vector = CountVectorizer(min_df=1, ngram_range=(2,2))  # bigram
X = vector.fit_transform(data)                         # 將分詞好的文本轉換為矩陣
print(vector.vocabulary_ )                             # 得到特征
###########有些變量可以print但是無法write,這時候加個類型轉換就好了###########
log.write(str(vector.vocabulary_))
###########***********************************************************###########
print(X)                                               #(句子下標, 單詞特征下標)   頻數(shù)
log.write(str(X))
df1 = pd.DataFrame(X.toarray(), columns=vector.get_feature_names()) # to DataFrame
df1.head()
###############記得最后要close日志文件###############
log.close()
###############************************###############

可改進的:

字符串

避免在循環(huán)中用+和+=操作符來累加字符串.


Yes: x = '%s, %s!' % (imperative, expletive)
       x = '{}, {}!'.format(imperative, expletive)
       x = 'name: %s; score: %d' % (name, n)
       x = 'name: {}; score: {}'.format(name, n)
     
 
No: x = imperative + ', ' + expletive + '!'
      x = 'name: ' + name + '; score: ' + str(n)

由于字符串是不可變的, 這樣做會創(chuàng)建不必要的臨時對象, 并且導致二次方而不是線性的運行時間. 作為替代方案, 你可以將每個子串加入列表, 然后在循環(huán)結束后用 .join 連接列表. (也可以將每個子串寫入一個 cStringIO.StringIO 緩存中.)

Yes: items = ['<table>']
     for last_name, first_name in employee_list:
         items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
     items.append('</table>')
     employee_table = ''.join(items)
     
No: employee_table = '<table>'
    for last_name, first_name in employee_list:
        employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name)
    employee_table += '</table>'

無關效率但是提高代碼可讀性的

空格

不要在逗號, 分號, 冒號前面加空格, 但應該在它們后面加(除了在行尾). 為了美觀以及IDE的規(guī)范提示

Yes: if x == 4:
           print x, y
       x, y = y, x
     
No:  if x == 4 :
           print x , y
       x , y = y , x 

在二元操作符兩邊都加上一個空格, 比如賦值(=), 比較(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布爾(and, or, not). 至于算術操作符兩邊的空格該如何使用, 需要你自己好好判斷. 不過兩側務必要保持一致.

分號

不要在行尾加分號, 也不要用分號將兩條命令放在同一行.

行長度

每行不超過80個字符

例外: 長的導入模塊語句,注釋里的URL

括號

對括號進行最佳精簡化,能少則少

空行

頂級定義之間空兩行, 方法定義之間空一行

正文之后

搞掂 走起,后期看看效果哈

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容