下麵這樣的一串代碼相信很多人都寫過,但可能除了你自己沒有人看得懂: for range in range(n): for j in range(m): for k in range(l): temp_value = X [i] [j] [k] * 12.5 new_array [i] [j] [k] ...
下麵這樣的一串代碼相信很多人都寫過,但可能除了你自己沒有人看得懂:
for range in range(n): for j in range(m): for k in range(l): temp_value = X [i] [j] [k] * 12.5 new_array [i] [j] [k] = temp_value + 150
為了圖方便,使用了簡單而無實際含義的變數以及數值,放在任何程式中都可以用,看的人要想半天或者上下查找才能知道變數是什麼意思,給別人修改和調試帶來很大麻煩。
所以如果你的代碼不僅僅是給自己看的,就儘量不要再這麼寫,多使用描述性變數名稱和命名常量編寫代碼,養成一個變數命名的好習慣。
來看看用標準變數怎麼寫上面的代碼:
PIXEL_NORMALIZATION_FACTOR = 12.5 PIXEL_OFFSET_FACTOR = 150 for row_index in range(row_count): for column_index in range(column_count): for color_channel_index in range(color_channel_count): normalized_pixel_value = ( original_pixel_array[row_index][column_index][color_channel_index] * PIXEL_NORMALIZATION_FACTOR ) transformed_pixel_array[row_index][column_index][color_channel_index] = ( normalized_pixel_value + PIXEL_OFFSET_FACTOR )
雖然代碼量增大了,但是別人一看就能看懂,不管隔多久再來看很快就能明白,而第一段代碼,過一陣再看你還能明白是乾什麼的麽?
好的程式員都會遵守的代碼變數命名規則:
- 變數名應該能夠描述變數表示的信息。
- 優先考慮代碼的易懂性,而不是編寫代碼的速度。
- 採用標準的命名約定,做出一個全局決策而不是多個本地決策。
所以命名不標準的原因主要有兩個:
- 無益/混淆/模糊的變數名稱
- 未命名的“魔法”常數
簡單來說,不要再像下麵這樣命名變數:
X, y, xs, x1, x2, tp, tn, clf, reg, xi, yi
要糾正也很簡單,遵守下麵三條簡單規則即可:
- 變數/函數名稱:用小寫字母表示,中間用下劃線分割
- 常量:用大寫字母
- Class 類:首字母大寫,其餘小寫
詳細來說有這麼些註意事項:
- ###
X
和y
:
X 和 y 你可能已經看過幾百次,知道它們的功能,但對於閱讀代碼的其他開發人員來說,這可能並不明顯。所以,不妨使用描述這些變數是代表什麼的名稱,例如:house_features 和 house_prices。
value
:
value 值具體是什麼呢?可能是一個velocity_mph
,customers_served
,efficiency
,revenue_total
。不同的 value 最後加一個詳細的首碼。
- ###
temp
:
臨時變數雖然可以用 temp 表示,但最好還是給它一個有意義的名稱。比如是需要轉換單位的值,像下麵這樣寫:
#不要這樣做 temp = get_house_price_in_usd(house_sqft,house_room_count) final_value = temp * usd_to_aud_conversion_rate #這樣做(小編整理一套Python資料和PDF,有需要Python學習資料可以加學習群:631441315 ,反正閑著也是閑著呢,不如學點東西啦~~) house_price_in_usd = get_house_price_in_usd(house_sqft, house_room_count) house_price_in_aud = house_price_in_usd * usd_to_aud_conversion_rate
- ### 縮寫:
如果使用縮寫變數,最好提前申明縮寫變數名的含義,比如usd, aud, mph, kwh, sqft
這些。與普通縮寫的團隊其他成員達成一致並寫下來。然後,在代碼審查中,確保執行這些書面標準。
- ### 避免機器學習特定的縮寫:
比如儘量不要用 tp
, tn
, fp
, fn
,這些縮寫變數,而是使用完整的變數代替:true_positives,true_negatives,false_positives,和false_negatives。
導致錯誤變數名直接原因?
下麵這兩個原因是寫出錯誤變數名的重要原因:
- 希望保持變數名稱簡短
- 將公式直接轉換為代碼
根據上面的公式,一般情況下很可能就直接寫成:
temp = m1 * x1 + m2 *(x2 ** 2)
final = temp + b
這是看起來像是機器編寫的代碼,雖然電腦最終將運行它,但人看的次數更多,最好編寫適合人理解的代碼:
house_price = price_per_room * rooms + price_per_floor_squared *(floor** 2)
house_price = house_price + expected_mean_house_price
不要使用魔法數字
魔法數字就是不是變數名的恆定值,通常用於單位轉換。但這樣的轉換代碼是錯誤的:
final_value = unreverted_value * 1.61 final_quantity = quantity / 60 value_with_offset = value + 150
沒人理解 1.61、60 表示什麼單位,自然也就看不懂轉換後的變數含義,所以最好給這個轉換數值賦予變數名,比如:
USD_TO_AUD_CONVERSION_RATE = 1.61 price_in_aud = price_in_usd * USD_TO_AUD_CONVERSION_RATE REVOLUTIONS_PER_MINUTE = 60 revolution_count = minutes_elapsed * REVOLUTIONS_PER_MINUTE
以上就是在代碼變數命名過程中需要註意的一些細節。