尼爾斯-BOM寫入(與編輯):
同樣的結果可以通過線在規則文件中的行只是在讀一環,和做搜索/替換爲讀取每一行來實現。
而事實上,這就是6.5節中的規則放在文件plural4-rules.txt中所實現的。現在將規則作爲字符串保存在文件中,我們的代碼將數據從控制中分離出來。這使項目更容易管理和維護。
尼爾斯的問題促使我勾畫出第6章的發展,努力準確瞭解作者試圖論證。在提供的開發中有很多要學習的經驗教訓,它不僅僅關於閉包,還包括編碼方面的最佳實踐。
的鍛鍊讓我瞭解到發生器可以如何被用來取代替代,那麼抽象,多落網實現。從6.2到6.6的材料的發展足夠教育在這裏草圖。
爲什麼使用閉包在這個例子中提高代碼:
所以我與尼爾斯關於分手的規則成單獨的功能在6.3的賽格瑞進入草圖第二點開始的?
筆者狀態在這一點上:
新增這級別的抽象的價值呢?那麼,還沒有。
還有部分6.4-6.6工作通過。封閉的故事,在這種情況下,建立一個多元化的發電機是一步一步實現的,從一個稱爲複數(名詞)的模塊中的硬編碼規則開始。因此,從第一個相關部分開始,總結本章的結尾部分,我們會得到以下結論。
6.2讓我們使用正則表達式:這裏筆者藉此機會加強和擴大我們與最初的複數函數中硬編碼的複數化規則的正則表達式的理解。
6.3。函數列表:將複數函數中硬編碼的規則抽象爲幾個獨立的函數。這是下一部分的「墊腳石」。但是它也證明了match_sxz()和match_sxz的用法有一個重要的區別。
6.4匹配模式列表:我們創造了個人命名的功能,如配對的匹配和應用,在6.3實際上是多餘的。這些功能都基於相同的模式,並且不會直接調用。在這裏他修改了這段代碼,以便更改規則。這成爲了進一步的抽象層次,規則現在在稱爲模式的變量中被指定爲字符串。多元化規則不再是功能。
6.5模式文件:沒有更多的重複代碼和字符串列表中定義的多元化規則,構建生成器的下一步是將這些字符串放在單獨的文件中。在這裏,它們變得更易於維護,與使用它們的代碼分開。
6.6生成器:生成器是一個通用的plural()函數,用於解析規則文件,檢查匹配項,適用規則並轉到下一條規則。這是關閉的一個例子。
這就是所有的plural()函數必須做的,這就是所有的plural()函數應該做的。
一個相對簡單和美觀的開發,足夠複雜,有用,可擴展到其他類型的問題,尤其是在文本模式識別中。
作者在本教程結束時討論了這個特定解決方案的性能問題。從文件中打開和讀取行會降低性能,尤其是在open()調用數量不斷增加的情況下。他表示,使用迭代器可以獲得更好的性能,本書後面將對此進行考慮。
謝謝! 我很喜歡使用類似風格和深度的這個答案的Python 3書,但我找不到一個... – max 2010-05-09 18:21:16