尼尔斯-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