coding習慣矯正

直系領導手把手帶我Refactor代碼,糾正下以前的壞習慣,記錄下來

目錄

1.try-except後一定要處理except:

2.不要把所有的參數說明都寫在代碼中,給一個link ref就好

3.不要把debug時的print等註釋掉,要麼刪除,要麼加上debug或者verbose變量:

4.利用枚舉清晰邏輯

5.習慣使用f-string與pep8進行format

6.命名規範


1.try-except後一定要處理except:

'''
原始寫法如下:
目的:pic1是opencv讀取的圖片,如果爲空返回一個[],但是不爲空時爲numpy,使用if not會報錯,就採用了try的方式,這是練leetcode學會的,用try規避報錯。
但是這裏這樣寫就導致了except沒有做任何事情,如果發生的其他錯誤,風險極大
'''
try:
    if not pic1:return
except:
    pass

'''
修改:
pic1如果爲空返回None而不是[],
'''
if pic1 is None:return

我很習慣用try去跳脫錯誤,但是這是不好的方式,改正!改正!

2.不要把所有的參數說明都寫在代碼中,給一個link ref就好


'''
原始寫法如下:
'''

'''
image: 必須是二值圖像,推薦使用canny邊緣檢測的結果圖像; 
rho: 線段以像素爲單位的距離精度,double類型的,推薦用1.0 
...
'''
lines = cv.HoughLinesP(img_canny, 1.0, np.pi / 180, threshold=30 + 5 * i, minLineLength=40, maxLineGap=5)


'''
改爲:
'''

'''
HoughLinesP參數 ref:https://blog.csdn.net/dcrmg/article/details/78880046
'''
lines = cv.HoughLinesP(img_canny, 1.0, np.pi / 180, threshold=30 + 5 * i, minLineLength=40, maxLineGap=5)

3.不要把debug時的print等註釋掉,要麼刪除,要麼加上debug或者verbose變量:

'''
原始代碼,imshow被註釋掉了,這是在debug過程中可視化展示調節的內容
'''
def main(json_path):
    # 此處省略。。。
    # cv.imshow('image', cv.resize(pic1, (500, 400)))
    # cv.waitKey(0)

'''
改動:直接刪除是一種方法,另一種方法是加上參數
main不光加上了verbose這個參數,還加上了*,目的是區分該debug的參數
'''
def main(json_path,*,verbose=False):
    # 此處省略。。。
    if verbose:
        cv.imshow('image', cv.resize(pic1, (500, 400)))
        cv.waitKey(0)

這個其實比較簡單,只是要養成這種習慣,不然代碼會debug過程中越來越亂,尤其是有些debug內容又不想刪掉就難以區分

4.利用枚舉清晰邏輯

枚舉類似於結構體,這樣雖然代碼看起來複雜了一些,但是邏輯更加清晰了

'''
原始代碼:
'''
image = image[...,0]  # 讀取藍色通道


'''
改動,創建一個py文件存放枚舉數據,使用枚舉變量進行讀取,一眼就能看出是讀取藍色通道,可去掉註釋了
from enum import IntEnum
class Channel(IntEnum):
    BLUE = 0
    GREEN = 1
    RED = 2
'''
image = image[..., Channel.BLUE]  # 讀取藍色通道

5.習慣使用f-string與pep8進行format

f-string誰用誰知道,真好用

按代碼規範format養成習慣就行

6.命名規範

(1)類名一般是首字母大寫:比如CameraCalibration
(2)變量名一般用下劃線:比如camera_param
(3)python習慣:一個下劃線表示self的變量,兩個下劃線表示內部方法,一般而言在init中初始化的變量都是帶下劃線的:

def __init__(self, aruco_detector, image_size):
    self._ARUCO_DETECTOR = aruco_detector
    self._IMG_SIZE = image_size

(4)全局變量全大寫,以前java也是如此
(5)變量名字一眼要能讀懂什麼意思,比如camera_params就是相機的參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章