本文主要介绍python中的函数定义方法以及函数定义和模块化存在的必要性
为什么需要函数定义和模块化
软件开发著作《人月神话》中有一个观点:软件开发的本质是控制系统的复杂度。对此,我是举双手双脚认同的。
- 我们知道程序或者通俗说的电脑只能做重复性的工作,代码归根结底会被归纳到“条件”、“循环”和“递归”的排列组合中。
- 正是因为我们让程序做的是都是重复性强的任务,这意味着很可能任务与任务之间只是存在着一些输入差别或者类似机械零部件/内部参数有细微差别。
- 为了让我们在面对多个相似任务的时候,不用写出几段相似的代码来分别完成这些相似任务,我们会需要将任务相似部分对应的代码做一个包装/封装/固定,然后每次只在输入或参数上进行调整来多快好省地完成多个相似任务。
帮助我们做到“把相似部分的代码固定下来重复使用”这件事的就是“函数”。
在函数之上更大的一个话题就是模块化,我们提取出固定部分是为了不再关心这部分内容,而是重点关系输入、参数和输出。同样的,在开发过程中,我们也会让函数包含的代码尽可能少,让理解函数功能所需要的时间、认知成本尽可能小。基于这一点会有诸多比如代码设计原则、微服务、测试驱动开发之类的最佳实践。(当然,这是后话,入门阶段只需要记住开篇那句高亮出来的信条即可)
如何定义一个函数
python中函数定义相当简单,符合函数定义的格式即可:
def 函数名称(函数参数1, 函数参数2, .....):
"""里面放入要重复使用的代码即可"""
函数的参数就是我们说的各个相似任务之间有差异的部分,差异的部分作为参数(或者叫输入)传入函数中,就可以跟函数中的固定代码组合成处理特定任务的代码了。函数参数的个数可以为0,也可以任意多个。
于是,我们用一个数学计算问题来说明函数定义处理相似任务的功能。比如,我们需要进行多次的平方运算或者立方运算(假设我们现在初中在做数学作业,靠程序来帮我们算),那么我们有两个任务:
- 求平方
- 求立方
我们可以写成如下形式:
def calculate(number, time):
"""
number是要进行平方或者立方运算的数值
time代表要进行几次乘法, 平方运算传入2, 立方运算传入3
"""
if time == 2:
return number * number
if time == 3:
return number * number * number
"""或者写成以下形式"""
result = 1
for _ in range(time)
result = result * number
return result
不用想太多,直接用起来吧!
好书推荐:
好课推荐:
写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇