第 7 章 函数(2)
朱雷
7.3 编程建议
7.3.1 别写太复杂的函数
你有没有在项目中见过那种长达几百行、逻辑错综复杂的“巨无霸”函数?那样的函数不光难读,改起来同样困难重重,人人唯恐避之不及。所以,我认为编写函数最重要的原则就是:别写太复杂的函数。
为了避免写出太复杂的函数,第一个要回答的问题是:什么样的函数才能算是过于复杂?我一般会通过两个标准来判断。
长度
第一个标准是长度,也就是函数有多少行代码。
诚然,我们不能武断地说,长函数就一定比短函数复杂。因为在不同的编程风格下,相同行数的代码所实现的功能可以有巨大差别,有人甚至能把一个完整的俄罗斯方块游戏塞进一行代码内。
但即便如此,长度对于判断函数复杂度来说仍然有巨大价值。在著作《代码大全(第 2 版)》中,Steve McConnell 提到函数的理想长度范围是 65 到 200 行,一旦超过 200 行,代码出现 bug 的概率就会显著增加。
从我自身的经验来看,对于 Python 这种强表现力的语言来说,65 行已经非常值得警惕了。假如你的函数超过 65 行,很大概率代表函数已经过于复杂,承担了太多职责,请考虑将它拆分为多个小而简单的子函数(类)吧。
圈复杂度
第二个标准是“圈复杂度”(cyclomatic complexity)。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了函数编程中的关键概念和技术特点,为读者提供了宝贵的编程建议和技巧。首先,强调了设计精确抽象的重要性,建议避免编写过于复杂的函数,保持函数长度和圈复杂度在规定标准内。其次,指出函数的抽象级别应保持一致,异常处理应与函数抽象级别相匹配。此外,文章还介绍了函数式编程的特点,如使用列表推导式和避免过度使用lambda表达式。同时,强调了Python中lambda函数的局限性,提出了使用operator模块等替代方式。另外,探讨了函数与状态的关系,提出了避免使用全局变量给函数增加状态的建议。最后,总结了在Python中编写函数时的相关知识,包括设计函数参数、返回结果类型的统一、在函数中保存状态的几种常见方式等。通过具体的编程建议和案例分析,本文为读者提升编程技能和理解能力提供了重要的指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 工匠:案例、技巧与工程实践》
《Python 工匠:案例、技巧与工程实践》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论