跳轉到

1991:0.9.0 首次公開——函式、類別、例外一次到位#

事件#

1991 年 2 月,Guido 在 alt.sources 新聞群組上發佈 Python 0.9.0 原始碼。令人驚訝的是,這個「0.9」版本已經具備完整的語言骨架:函式、類別(class)、例外處理(try/except)、核心資料型別(list、dict、tuple、string)、以及 import 模組系統。

為何重要#

  • 起點即是完備語言:不像許多腳本語言(如早期 PHP)一開始只是簡陋的工具,Python 0.9.0 就有多型、繼承、例外——這讓 Python 從第一天就「能寫大程式」。
  • alt.sources 開源社群:Guido 公開原始碼並歡迎修改,Python 因此從個人專案變成社群專案;這是 1990 年代初「開源」概念成形前的一次實踐。

理論與實用原因#

  • 理論原因:
  • 例外處理參考 Modula-3(Guido 在 CWI 接觸過)——與 1975 年的 CLU 語言一脈相承的「以控制流取代錯誤碼檢查」理論。shell/C 時代以回傳值判斷錯誤,容易遺漏;Python 從第一天就提供統一的例外機制。
  • 類別參考 Smalltalk(1972) 的訊息傳遞模型,但採用更輕量的語法:一切皆物件,連函式、模組、類別本身都是物件——這是統一資料模型(uniform object model)的實踐。
  • 實用原因:Guido 的目標用戶是「會寫 C、但厭倦 C」的系統管理員與科學家——他們需要例外(腳本會遇到各種 IO 錯誤)與模組(重複使用程式碼)。

彌補了什麼缺陷#

彌補了 ABC「無例外處理、無模組、不可擴充」三大缺陷;彌補了 shell「無資料結構、無抽象能力」的缺陷。

程式範例#

0.9.0 就已完備的三大骨架:

# 例外處理(參考 Modula-3/CLU):取代回傳碼檢查
try:
    f = open("/etc/passwd")
    data = f.read()
except IOError as e:          # 錯誤有統一的處理點,不會被遺漏
    print("讀檔失敗:", e)
finally:
    f.close()

# 類別(參考 Smalltalk):一切皆物件
class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def distance(self):       # 方法本身就是物件
        return (self.x**2 + self.y**2) ** 0.5

# 模組系統:從第一天就能寫大程式
import math, os               # math.sqrt、os.path 都可重複使用

shell 時代的錯誤處理(對比):

# 回傳碼容易遺漏:忘了檢查 $?
cat /etc/passwd > /dev/null || echo "失敗"

相關條目#