之前文章中有个案例:根据考试分数打印安全意识分级(优秀、及格和不及格)的代码,如下所示:
a = 75
if a > 80:
print("优秀")
elif a > 60:
print("及格")
else:
print("不及格")
如果我们现在需要一次性看三位同学的分级结果,比如 a 75 分,b 90 分,c 66 分,然后打印出每个人的分级信息。根据我们之前的知识,很自然就想到,针对每个变量都执行一次上面的 if-elif-else 语句即可,完整的代码是这样的:
a = 75
b = 90
c = 66
if a > 80:
print("优秀")
elif a > 60:
print("及格")
else:
print("不及格")
if b > 80:
print("优秀")
elif b > 60:
print("及格")
else:
print("不及格")
if c > 80:
print("优秀")
elif c > 60:
print("及格")
else:
print("不及格")
最终输出是及格、优秀、及格,分别代表 a、b、c 三位同学的分级结果。
及格
优秀
及格
结果是计算出来了,但回过头去看会发现明明看着很像,却愣是重复写了三次。有没有更好的方式来避免重复写多次结构类似的代码呢?而且这个例子,重复的部分还只有 6 行,要是一个计算过程有 50 行,然后要针对一个班级 50 个同学都执行一次,难道我们需要写 50 x 50 = 2500 行代码吗?
答案是肯定的,在 Python 中相似结构的代码复用通过函数来实现。了解了函数,我们才能真正意义上编写复杂的代码。
1、什么是函数
看到函数,可能你首先会条件反射地想到数学中的“函数”,但 Python 中的函数和数学中的不是一回事,不需要联合起来理解。
Python 中的函数简单来说就是一段有名字的代码块。通过函数的机制,我们可以给我们希望重复使用的代码块起个名字,这样我们之后要用这个代码块的时候,就不需要重新写一遍一模一样的代码块,而只需要简单写一次之前给代码块起的名字即可。普通函数的形式如下所示:
def 函数名():
代码块
其中的关键要素是:
- def, Python 的关键字,代表我们接下来要创建一个函数;
- 函数名,顾名思义,函数的名字,名字需要符合变量起名的定义;
- 冒号,大家应该很熟悉了,这代表冒号后面的代码块的名字是冒号前面的【函数名】;
- 代码块,也就是我们想起名字来指代的代码块,这种函数对应的代码块,我们也叫函数体。注意这里的代码块和 if 语句的代码块一样,需要缩进。按照 Python 的规则,在冒号后面的代码块都需要相对于冒号所在的行缩进。
当我们创建完函数之后,要实际执行函数中的代码块,还需要执行该函数。函数执行的形式比较简单:函数名之后加一个括号即可。形式如下:
函数名()
(1)小实战:打印字符三角形
现在我们用一个简单的例子来感受函数的用处。假设我们需要使用字符 A 打印一个简单的三角形。
print(" A")
print(" AAA")
print("AAAAA")
输出:
A
AAA
AAAAA
现在我们想打印三个,虽然我们可以用类似本文开头的方式,把上面的代码复制出三份。但现在我们用函数的方式来解决。新建 Cell ,输入如下代码:
def print_triangle():
print(" A")
print(" AAA")
print("AAAAA")
执行上述代码,发现并没有任何内容输出。原因就是目前我们只是创建了函数(给代码块起了名字),但还没有实际执行它。
现在我们来执行一下,新建 Cell,输入以下代码:
print_triangle()
执行代码,输出结果就可以看到我们的代码块被成功执行了。
A