Python程式設計上的一些挖坑行為,你可能也犯了。
下面這樣的一串代碼相信很多人都寫過,但可能除了你自己沒有人看得懂:
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:857662006
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!!
'''
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
這并不是一段好的的代碼,為了圖省事,使用了簡單而無實際含義的變量及數值,看起來在任何程式中都可以用,對于看的人來說就是災難,因為要想半天或者檢視上下文才知道你寫的變量是什麼意思,給别人修改和調試帶來很大麻煩。
是以如果你的代碼不僅僅是給自己看的,就盡量不要再這麼寫,多使用描述性變量名稱和命名常量編寫代碼,養成一個變量命名的好習慣。
來看看用标準變量怎麼寫上面的代碼:
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:857662006
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!!
'''
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 表示,但最好還是給它一個有意義的名稱。比如是需要轉換機關的值,像下面這樣寫:
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:857662006
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!!
'''
#不要這樣做
temp = get_house_price_in_usd(house_sqft,house_room_count)
final_value = temp * usd_to_aud_conversion_rate
#這樣做
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。
導緻錯誤變量名直接原因?
下面這兩個原因是寫出錯誤變量名的重要原因:
- 希望保持變量名稱簡短
- 将公式直接轉換為代碼
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yM1QmM3MGMhZmY0kzN0AzNidTNjJWO0YWZmhzM2UGM38CXwIzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
img
根據上面的公式,一般情況下很可能就直接寫成:
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
不要使用魔法數字
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:857662006
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!!
'''
final_value = unreverted_value * 1.61
final_quantity = quantity / 60
value_with_offset = value + 150
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