不到500行Python程式碼,你能編出什麼?

趙鈺瑩發表於2018-05-07

  不到500行Python程式碼,你能寫出什麼東西?Github上一個名為“500lines”的開源專案集結了眾多業內較為知名的開發者,同時,所有貢獻專案的程式碼行數均在500行以內。完整版本每章包含一個程式演練,該程式在至多500條原始碼行中解決了軟體工程中的規範問題。來看看業內一線的程式設計大牛能在500行程式碼之內編出什麼程式吧!

  每位建築師在學習期間都會研究家庭住宅、公寓、學校和其他常見建築型別。同樣,每個程式設計師都應該知道編譯器如何將文字轉換為指令,電子表格如何更新單元格以及資料庫如何高效保持資料。

不到500行Python程式碼,你能編出什麼?
▲專案完整清單

  很多書籍和資料會給出非常棒和相對成熟的高階架構,但這些可能並不實用,當程式碼行數縮減,很多不必要的設計就會被避免,選擇什麼樣的介面、框架、如何擴充套件、如何合理利用繼承等會變得很重要,這對於程式設計師來說,很容易被吸收。

  該專案重點關注有經驗的程式設計師在編寫程式碼時所做的設計決策和權衡:

  為什麼用這些特定的介面將應用程式分成某些特定模組?

  為什麼要在這裡繼承?

  如何預測程式可能需要擴充套件的地方,以及如何讓其他程式設計師使用更容易?

  (以下為500 Lines or Less專案內包含的部分開源專案簡短介紹,完整專案檔案和解說均可通過文末連結檢視)

  1、500 Lines or Less——視覺化程式設計工具(Blockcode)

  該專案主要用於為龜圖(turtle graphics)實現塊語言,通過簡單拖放建立圖案,整個過程通過常用的Html、CSS和JavaScript來實現(每一個塊由html元素組成,CSS用於設定樣式,JavaScript時間處理器進行拖拽並修改引數)。其次,作者將塊構建為一個框架以服務其他程式語言。

不到500行Python程式碼,你能編出什麼?
▲操作檢視效果

  該專案也是圖形程式設計的一種方式,目前圖形程式設計也被廣泛應用於低年級學生程式設計教學中。Github上也有很多類似專案,雖然程式語言可能不同,但實現邏輯有異曲同工之妙。

  2、500 Lines or Less——持續整合系統

  該專案作者曾任職於Mozilla,後轉去Twitch工作,一直致力於在保證程式碼安全的前提下提升程式設計師的編碼速度。

  在這個敏捷開發、敏捷交付的時代,很多程式在上線前的測試都不完整。多數情況下,開發人員會在開發過程中直接測試程式碼以確保功能實現的完整和穩定,隨著版本的不斷迭代,需要進行的測試越來越多,持續整合系統可以很好地解決這類問題,在開發環境中對不斷迭代的程式碼進行完全測試。

  這類系統主要功能就三項:獲取更改後程式碼、自動測試程式碼、生成測試報告。但是,這個過程必須是穩定的、正確的以及可恢復的。

  3、500 Lines or Less——Python 直譯器

  該專案名為Byterun,是一個用Python實現的Python直譯器。它的結構與CPython非常相似,但是Byterun更小。它最大的缺點是速度略慢,但已經可以解析大多數程式碼了,畢竟這是500行程式碼以內完成的,肯定會有一些不足。而且,CPython基於C語言實現並做了大量優化。

  作為一個直譯器,Byterun很容易被理解,如果你希望搞清楚一個直譯器的編寫過程,這是一個非常不錯的嘗試,並且Python語言本身就很容易理解。

  4、500 Lines or Less——簡單的物件模型

  該專案主要實現了一套簡單的物件模型,先實現一個簡單的類與例項,並能夠通過例項訪問一些方法,這是很多早期面嚮物件語言所採用的物件導向模型。然後,在此基礎上逐漸擴充套件,進一步優化效能得到一個低配版的Python物件模型。

  5、500 Lines or Less——光學文字識別

  該專案涉及目前大火的人工智慧技術,專案說明針對人工智慧、反向傳播進行了部分解說,對於想要進入人工智慧領域的開發者而言,這是非常棒的學習資料和實踐專案。

  作者利用前饋神經網路探索搭建了一個OCR系統,主要由5部分組成,分別寫在5個檔案之中。它們是:客戶端(ocr.js)、伺服器(server.py)、簡單的使用者介面(ocr.html)、基於反向傳播訓練的ANN(ocr.py)、ANN的實現指令碼(neural_network_design.py)

  6、500 Lines or Less——決策取樣器

  有一定數學基礎的開發者對取樣、多項分佈、隨機分佈等名詞一定不陌生,簡單來說,該專案將整個過程通過程式設計方式來實現。

  7、500 Lines or Less——模板引擎

  Web應用程式是典型以文字為主的常見任務,這類應用程式最重要的一個階段就是將生成的HTML送到瀏覽器,一般的HTML至少會包含一些小的動態資料,比如使用者名稱之類的。對於如何生成一個動靜態資料混合的大型字串是很多開發者一直在嘗試解決的問題,模板引擎就是這樣一個解決方案。

  8、500 Lines or Less——簡易web伺服器

  儘管網際網路技術發生了天翻地覆的變化,但過去20年裡,網路核心的改動卻不多,大多數web伺服器仍然遵循以前的方式處理資料,這個簡易的web伺服器同樣如此,如果你想了解web伺服器的簡單搭建過程,這個開源專案絕對是最好的選擇。

  完整的開源專案清單當然遠不止這8個專案,但部分專案尚未出現中文翻譯版,中文版地址中涵蓋了所有開源專案的具體說明連結,如果有興趣,可以自行移步至Github平臺。

不到500行Python程式碼,你能編出什麼?
▲中文翻譯完成現狀

  Github開源地址英文原版:https://github.com/aosabook/500lines

  Github開源地址中文版(待完成):https://github.com/HT524/500LineorLess_CN

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2154017/,如需轉載,請註明出處,否則將追究法律責任。

相關文章