⌨️ 第四章 流程图与算法
📄 一句话概括

函数是把一段处理打包成的【机器】:参数是投料口、返回值是出料口、函数名是开关——一处定义、处处调用,这是代码复用的第一形态,也是【把大问题拆小】的工具。

📝 本节和前面几节的关系

4-1~4-3 备齐了顺序、分支、循环三大结构,函数把它们【打包命名】。回收 C++ 课第六章与树莓派课 6-5 的语法课,这里补齐【为什么要有函数】与【参数返回值的完整图景】。

一、函数:打包的处理机器

没有函数的世界:同一段【算平均分】的代码在程序里抄五遍,改一处漏四处。函数的世界:

def average(scores):            # def 定义;scores 是参数(投料口)
    """算平均分:列表 -> 浮点数"""
    return sum(scores) / len(scores)   # 返回值(出料口)

print(average([88, 92, 75]))    # 85.0  调用:喂参数、收返回值
print(average([60, 70]))        # 65.0

三大收益:复用(一处定义处处调用)、命名(average(...) 自带注释功能)、分而治之(整个程序拆成一堆小机器,每台只管一件事)。

二、参数:投料口的两种形态

def greet(name, greeting="你好"):     # greeting 是默认参数
    return greeting + "," + name

print(greet("王明"))                   # 你好,王明(默认值生效)
print(greet("王明", "早上好"))          # 早上好,王明

三、返回值:出料口

def min_max(nums):            # 返回多个值(其实是打包成元组,回收 3-11 的打包思想)
    return min(nums), max(nums)

lo, hi = min_max([88, 92, 75, 60])
print(lo, hi)                 # 60 92

三条纪律:

  1. return 一执行函数立刻结束——后面语句不跑;
  2. 没有 return 的函数返回 None——【函数里 print 了】不等于【函数返回了】(回收树莓派课 6-5:return 与 print 是两件事);
  3. 要【既给结果又给最小值】这类多输出,返回元组解包即可。

四、动手 Demo:函数改写前的对比

# 没有函数:三份相似代码
a = [88, 92, 75]
print(sum(a) / len(a))
b = [90, 80, 70, 60]
print(sum(b) / len(b))
c = [100]
print(sum(c) / len(c))

# 有函数:一处定义
def average(scores):
    return sum(scores) / len(scores)

print(average(a), average(b), average(c))

看到什么算成功:三行平均分输出两次(85.0、75.0、100.0 各出现两遍)。

读结果:两组输出完全一样——但函数版把【算平均】的知识集中在一行;哪天要改成【去掉最高最低再平均】,只改函数内部一处。代码量不是收益,【只改一处】才是。

五、30 秒实验

跑 print(print("hi"))——先打出 hi,再打出 None。print 函数的返回值是 None(它只负责打印这个动作)——30 秒看清【动作型函数】与【计算型函数】的区别,也再次验证【没 return 就是 None】。

六、常见误区

  1. 【函数只是为了少写代码】——不完整。更重要的是命名抽象:读 send_alert(...) 不用看内部就知道在干嘛——函数名是高层文档。
  2. 【函数里 print 了就算有结果】——错。print 是把字显示给人看;return 是把值交给调用方——给别人用的数据必须 return,打印替代不了。
  3. 【参数越多功能越强】——反了。参数超过四五个说明这台机器管得太宽(职责不清);拆成两个函数或用字典打包参数更好。
自测三问(点开对答案) 1. **形参与实参的区别?** 答:形参是定义时的占位名,实参是调用时喂进去的真值——机器的投料口标签与实际投进去的料。 2. **没有 return 语句的函数返回什么?** 答:None——【执行了 print】与【返回了值】是两回事,给别人用的数据必须 return。 3. **函数带来哪三大收益?** 答:复用(一处定义处处调用)、命名(函数名即文档)、分而治之(大问题拆成小机器)。

相关笔记