前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:鴻影洲冷
這篇文章主要內容來源于 Python 編程語言的最初設計者及主要架構師 Guido van Rossum 的博客 The History of Python(http://python-history.blogspot.com/),博客文章不多,只有32篇而已,但是 Guido van Rossum 在這個博客里敘述和解釋了 Python 一些重要特性的發明歷史和這個特性誕生的原因,比如為什么 Python 會叫 Python,Python 為什么會使用縮進區分編程陳述句等等,有些特性很平常,而且替代選擇也很多,至于為什么會選擇其中一個,使用者往往不好回答,而對于最初設計者而言,卻輕而易舉,
發明 Python 的動機
Guido 大學畢業后加入了 CWI ,CWI 是荷蘭的一家研究中心,它由荷蘭政府教育部和其他研究基金資助,對計算機科學和數學進行學術級的研究,在 CWI 中,Guido 參與了 Amoeba 專案,Amoeba 專案是由 Andrew Tanenbaum 負責,CWI 和 Vrije Universiteit Amsterdam 兩所機構共同參與開發的基于微內核的分布式系統,
在 Amoeba 專案中,Guido 發現用 C 語言開發系統管理程式所花費的時間太長了,而且因為 Amoeba 是一個全新的底層作業系統實作,導致了和原有的 Bourne shell 不兼容,在 Bourne shell 中無法執行 Amoeba 專案中的一些程式,這些原因讓 Guido 意識到它需要一個能夠彌合 C 和 shell 之間鴻溝,更高抽象級別、更加簡單的編程語言去完成作業任務,
于是 Python 誕生了,
同樣的 Guido 也在文章中解釋了為什么選擇造輪子發明 Python,而不是移植其它編程語言 ?那是因為當初并沒有其它編程語言可以完成這些任務,
Python基礎入門資料加群免費領取
資料就在群檔案里放著喲
為什么 Python 要叫 Python ?
Python 的中文是“蟒蛇”的意思,而且 O’Reilly 出版社也用蟒蛇圖片作為了 Python 相關書的封面(O’Reilly 非常喜歡用動物圖片去作為其出版物的封面),平時看過的一些關于 Python 文章想當然的認為 Python 這門語言與蟒蛇關聯上了,但實際上 Guido 并不喜歡將 Python 與蛇關聯上,
For many years I resisted attempts to associate the language with snakes.
Guido 使用 Python 這個名字的靈感來源于他喜歡的一個馬戲團的名字 Monty Python,并且他認為使用 Python 更具有 IT 行業一貫以來的不拘一格的個性,也符合編程語言的名稱來源于名人的名字的習慣,
The word “Python” was also catchy, a bit edgy, and at the same time, it fit in the tradition of naming languages after famous people, like Pascal, Ada, and Eiffel.
Guido 眼里的 Python 是什么樣的?
Guido 在博客的開篇便提起了他所認為的 Python 是什么樣的一門語言,從中摘抄幾個核心設計點:
- Python 大量的采用了 C 語言里面的設計,比如 if、else 等關鍵字都直接來源 C 語言,但是放棄了 C 語言的大括號和分號,選擇了縮進去區分不同的編程陳述句,
- Python 是一門動態語言,不像 C 語言一樣需要預先宣告變數和指定變數型別,,因此 Python 里的變數只是所參考物件的名稱,并且也可以在程式運行時改變變數型別,
- Python 內置了大量的資料型別,包括布爾(Boolean)、數字(Number)和字串(String)等,這些型別都是不可變的,除此以外還有像串列、元組和字典這種容器型的資料型別,
- 為了程式的模塊化,Python 引入了包(packages)、模塊(modules )、類、方法和函式,為了流程控制,Python 提供了 if/else、while 和可迭代的實體,為了處理程式例外,Python 使用了 Exception 語法,raise 關鍵字可以拋出例外(exception),try/except/finally 可以處理例外,
- Python 的所有物件都是一等物件,這意味著函式、類、方法、模塊和所有的其他物件都可以在運行時自由地傳遞,并放入在各種資料結構(例如串列或字典)中去,
- 同樣的,Python 還支持面向物件編程,
- 除了自身特性外,Python 還擁有著大量的標準庫和第三方庫,方便使用者完成各種各樣的需求,
- 最后,Python 的標準實作使用 C 語言實作的,但是 Python 不僅僅局限于 C 語言,它也可以用 Java(Jython)、Microsoft .NET(IronPython),甚至是 Python 自己實作(PyPy),
注意到沒有,Guido 在開篇從未提到 Python 是一門追求性能的語言,至于為什么,在下一章提到 Guido 的設計哲學會提到,為什么 Python 不會一味地追求性能,
Python 的設計哲學
在了解 Python 的設計哲學之前,首先要知道 Python 在剛開始時是一個一個人獨自維護的專案,沒有任何官方預算,也沒有任何其它支持,并且 Guido 也希望能盡快出結果,這些因素影響了 Python 的設計哲學,
First of all, Python was originally conceived as a one-person “skunkworks” project – there was no official budget, and I wanted results quickly
可以偷懶的設計哲學:
- 盡可能從其他地方借用想法,
- “事情應該盡可能簡單,但不要簡化,” (愛因斯坦)
- 只做好一件事情(UNIX哲學思想),
- 不要對性能太擔心-以后有需要時,再進行優化,
- 不要與環境(environment)抗爭,順其自然,
- 不要追求完美,“足夠好”就可以了,
- (因此)有時可以偷工減料,后續可以想辦法彌補,
這些設計哲學幫助 Guido 在實作 Python 時節省了大量的寶貴時間,沒有陷入到沒有必要的細節中去;在不應該節省時間的地方,Guido 花費了大量的時間去精雕細琢,Guido 在 Python 這門語言中展現了他對實作細節本身和實作細節所需要花費時間的平衡的把握程度,
不可以偷懶的設計哲學:
- Python 不能僅僅運行在某個特定平臺(Linux 或者是 Windows)上,雖然 Python 在一些平臺上的某些功能并不總是可用的,但是其核心功能應該在任何平臺上都可以使用,
- 不要用機器可以處理的細節去打擾用戶,也就是說,機器能夠完成的,就需要用戶去實作它,
- 支持和鼓勵只能運行于特定平臺的用戶代碼,但不能讓用戶不能訪問對平臺本身的功能或特性(這與Java形成了鮮明對比),
- 一個大型的復雜系統應具有不同級別的抽象擴展能力,這可以為有想法的的用戶(無論其是否熟練)提供最大的自由去實作他想要的功能,
- 錯誤不應該是致命的,也就是說,只要虛擬機仍在運行,用戶代碼就能夠從錯誤狀況中恢復過來,
- 同樣的,錯誤不應該被靜默地傳遞,
- 不應該讓用戶 Python 代碼中的 bug 導致 Python 解釋器出現未定義行為,
- 最后,為了盡可能保持 Python 的可讀性,標點符號使用應該符合書面英語或高等代數中的常用用法,除非遇上了編程語言里的歷史傳統(比如用 x * y 表示乘法),
就像 Guido 所說的那樣,這些設計哲學正是讓 Python 獲得如此巨大成功的主要原因之一,
In many ways, the design philosophy I used when creating Python is probably one of the main reasons for its ultimate success. Rather than striving for perfection, early adopters found that Python worked "well enough" for their purposes. As the user-base grew, suggestions for improvement were gradually incorporated into the language.
Python 為什么會使用縮進和冒號(:)區分編程陳述句?
Python 使用縮進區分編程陳述句來源于 ABC 編程語言,但是這個想法并非起源于 ABC,它是 Donald Knuth 所提倡的一種著名的編程風格( occam 編程語言也使用過它),但是,ABC 編程語言的作者確實發明了使用冒號將匯入陳述句(lead-in clause)與縮進塊(indented block)分開的方式,
至于為什么要引入冒號進一步區分編程陳述句,是因為在一項早期的用戶測驗中發現單純地使用縮進去區分陳述句,會讓一些用戶產生疑惑,影響了他們對編程語言的學習,而后面在編程語言里添加了冒號去區分編程陳述句,就會引起用戶對后續內容的注意,從而幫助用戶將前后的編程陳述句聯系起來(想想 if/else、while 和 for 陳述句),
總結
除了上文提到,The History of Python 這個博客中還聊了很多,比如有對串列推導和迭代器歷史的敘述,還有對 Python 為什么不是一門函式式編程語言,卻有著函式式編程語言特性的解釋,等等,
通過對這些歷史的了解,讀者朋友可能在某個時刻寫著寫著代碼,用到了某個特性,想到了它的歷史,便會心一笑:原來如此,心情也會豁然開朗,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/96423.html
標籤:Python
上一篇:服務器之間實作免密登錄的簡易教程
下一篇:設定表格對齊方式和設定單元格大小
