Python函数设计的原则

[复制链接]
查看11 | 回复2 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
原则 1 函数设计要尽量短小,嵌套层次不宜过深。所谓短小,就是跟前面所提到的一样尽量避免过长函数,因为这样不需要上下拉动滚动条就能获得整体感观,而不是来回翻动屏幕去寻找某个变量或者某条逻辑判断等。函数中需要用到 if、elif、while、for 等循环语句的地方,尽量不要嵌套过深,最好能控制在 3 层以内。相信很多人有过这样的经历:为了弄清楚哪段代码属于内部嵌套,哪段属于中间层次的嵌套,哪段属于更外一层的嵌套所花费的时间比读代码细节所用时间更多。
原则 2 函数申明应该做到合理、简单、易于使用。除了函数名能够正确反映其大体功能外,参数的设计也应该简洁明了,参数个数不宜太多。参数太多带来的弊端是:调用者需要花费更多的时间去理解每个参数的意思,测试人员需要花费更多的精力来设计测试用例,以确保参数的组合能够有合理的输出,这使覆盖测试的难度大大增加。因此函数参数设计最好经过深思熟虑。
原则 3 函数参数设计应该考虑向下兼容。实际工作中我们可能面临这样的情况:随着需求的变更和版本的升级,在前一个版本中设计的函数可能需要进行一定的修改才能满足这个版本的要求。因此在设计过程中除了着眼当前的需求还得考虑向下兼容。

回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
如以下示例:>>> def read?le(?lename): // 函数实现的第一版本
... print "?le read completed"
...
>>> read?le("test.txt")
?le read completed
>>>
>>> import logging
>>>
>>> def read?le(?lename,logger): // 函数实现的第二版本
... print "?le read completed"
...
>>> read?le("test.txt")
Traceback (most recent call last):
File "", line 1, in
TypeError: read?le() takes exactly 2 arguments (1 given)复制代码上面的代码是相同功能的函数不同版本的实现,唯一不同的是在更高级的版本中为了便于内部维护加入了日志处理,但这样的变动却导致程序中函数调用的接口发生了改变。这并不是最佳设计,更好的方法是通过加入默认参数来避免这种退化,做到向下兼容。上例可以将第一行代码修改为:def read?le(?lename,logger=logger.info):复制代码
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
如以下示例:>>> def readfile(filename): // 函数实现的第一版本
... print "file read completed"
...
>>> readfile("test.txt")
file read completed
>>>
>>> import logging
>>>
>>> def readfile(filename,logger): // 函数实现的第二版本
... print "file read completed"
...
>>> readfile("test.txt")
Traceback (most recent call last):
File "", line 1, in
TypeError: readfile() takes exactly 2 arguments (1 given)复制代码上面的代码是相同功能的函数不同版本的实现,唯一不同的是在更高级的版本中为了便于内部维护加入了日志处理,但这样的变动却导致程序中函数调用的接口发生了改变。这并不是最佳设计,更好的方法是通过加入默认参数来避免这种退化,做到向下兼容。上例可以将第一行代码修改为:def readfile(filename,logger=logger.info):复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行