10.28 命名不善的代碼會有多坑?這段Python官方入門教程的例程是個典型

看過Python3官方入門的同學也許對這段代碼有印象:

大多數讀者也許都認為這些字符串和數字並沒有特別意義。如果真是這樣,這個例程還不如用 “dict = {'aa': 100,'bb': 200}” 之類來的一目瞭然,省去多餘的猜度。

雖然可以將其中的標識符和字符串當做亂碼來閱讀,也能習得 Python 的字典操作,但誰讓小編有個刨根究底的勁頭呢。

不巧發現"guido"是 Python 創作者的名字 (Guido van Rossum),更覺得不該這麼簡單。根據 Python 源代碼27年前的 commit “6fc178f46d40aa068a713b509904d343ee55cfa6”,這個教程中的示例代碼是 Guido 本人編寫的。因此與他1991年8月附近的經歷應該有關。接著找到他的簡歷中的:

From 1986 till 1991 I was with the Amoeba project,headed by Sape Mullender

發現“Sape”也是人名,基本可以確定是他的同事的名字。接下去搜到這裡"Open Software Foundation"文末,Sape Mullender 的電話是+20-592 4139,可以印證例程中的關鍵變量“tel”應該指的是當時他們的電話號碼後四位.

接著找到 Jack 的號碼: +31 20 592 4098 !又對上了“4098”

另外還找到 Guido 用過4127這一號碼,也許這是 CWI 那時的一個多人號碼,就能解釋這個代碼示例中還有"irv"也映射到了這個號碼.

原來,這就是一個電話簿!考慮到Python創造之初,主要用戶都是 Guido 的同事,也是當時他寫教程的讀者,這個示例代碼對於他們來說是很容易理解的。但隨著幾十年 Python 編程語言的推廣,它的含義也就被掩埋了.

通過這個例子,就很容易理解,為何英文代碼風格中一般不提倡縮寫名詞。如果原例程中的變量名是“phone”或者“telephone”,也會比“tel”好理解的多。字符串的首字母大寫也會更易於理解它們是人名。當然,對國人來說更易理解的當然是使用中文命名標識符:

隨著越來越多的編程教程使用類似上面的中文命名標識符,新手入門的門檻將會更加降低,也為將來在項目中實踐中文命名早作準備。

更多用中文編寫代碼的技術分享文章,請關注本號。