现在的位置: 首页 > 综合 > 正文

函数设计概念和指南

2014年01月15日 ⁄ 综合 ⁄ 共 1289字 ⁄ 字号 评论关闭

以下内容翻译至《Learning Python》17章的Function Design Concepts一节。有些地方翻译的不到位,敬请谅解,建议阅读原文,下面是原文翻译。

当你开始使用函数的时候,你马上就会面对的一个问题是“如何把多个部件结合到一起”,例如如何把一个任务分解成多个有目的的函数(内聚),函数之间如何通讯(耦合)等等。在函数的设计过程中你需要考虑内聚(cohesion)、耦合(Coupling)、函数的大小等一系列问题,这些都会影响到函数结构的分析和设计。下面为Python的初学者提供几条通用的设计指南。 耦合:使用“参数”做输入,用“返回”做输出。我们应该努力使一个函数独立于函数以外的东西。“参数”和“返回”通常都是使函数和外部隔离的最好的方法。 耦合:只在万不得已时候才使用全局变量。全局变量通常都是一种很差劲的函数间通讯的方式会导致若干函数间的相互依赖、时间选择(timing issue)等问题,并且最终从而使程序变得难以调试、维护和修改。 耦合:除非调用者期望,否则不要改变“可改变”的参数。函数能够改变部分传递过来的参数的值。但就和全局变量一样,这会导致调用和被调用函数间的依赖,从而使得函数变得特别的“特殊”和“易碎”。 内聚:每个函数应该有它自己单一的、唯一的目的。一个设计良好的函数应该只做一件事情,对函数功能的描述用一句简单的话就可以加以总结。当你发现对某个函数的描述过于宽泛的(例如,这个函数实现了我所有的程序),或是描述内容中包含了很多的关联(例如,这个函数给店员增加提成并提交一个pizza订单),你可以考虑将这个函数分割成几个独立的更为简单的函数。否则就无法重用混杂在一起的代码。 函数大小:每个函数都应该相对的小。这个原则实际上会和上面那个内聚目标关联在一起的。如果你的函数需要占据多个页面话,最好能够分割他们。在Python编程中如果出现某个function要依赖很长的、嵌入很深的嵌入函数这通常就是设计有问题的信号。让函数保持小且简单。 耦合:避免直接修改在另一个模块文件中的变量。作为参考,要谨记跟全局变量会耦合函数一样,跨多个模块文件修改变量会导致模块变得难以理解和重用。只要有可能就要使用存取方法,而不是直接的赋值语句。 下面这张图是对上述几条规则的总结。图的左边是函数的输入(包括了参数、全局变量、文件/流等等),图的右边是函数的输出(包括了返回语句、也变参数、全局变量)。很多函数设计人员更喜欢使用参数做为输入,用返回语句做为输出。

cb4ee938b4420507b8998fba当然对于之前的设计准则也会有不少的例外,例如Python中面向对象的支持。对象中的函数会通过self(也就是java和c中的this)来修 改对象中的状态信息(self.name=’bob’)。如果没有了对象的支持,开发人员很容易会用全局变量(上例中的name就会引入一个global 的name变量来替换)来实现几个函数间的相互调用和通讯,这样就会引入一些副作用和危险。

总结
作者在《Learning Python》描述的这段内容超越了特定语言的,使用各种语言的开发人员都可以从以上的内容中汲取函数设计的经验。

抱歉!评论已关闭.