跳转至

五、函数:教给员工一套动作

第 25~29 课

学到这块有一个明显的分水岭:之前是「敲代码」,之后是「写程序」。区别就在于——能不能把重复的逻辑打包成可复用的工具

第 25 课 函数是什么

函数 = 把一段重复的活打包、起个名字,以后喊名字就整套跑。

def fenge():
    print("=" * 20)

fenge()            # 调用一次 → 画条分界线
print("账目如下")
fenge()            # 再调一次 → 又一条

三件事:def 是「定义」,函数里的内容要缩进,调用就是 函数名加括号

第 26 课 参数与返回值

只有「喊一声就干」的函数是死的(每次都干一样的事)。要它灵活,得能「收材料」和「交结果」:

def nianzu(rent):     # rent 是参数:等着接你递进来的值
    return rent * 12  # return:把结果交回调用处

print(nianzu(4500))   # 54000
print(nianzu(5200))   # 62400

比喻:nianzu 是你教员工的「算年租」流程,rent 是递进去的材料,return 是员工交回来的结果。同一个函数递不同的值,出不同的结果——函数就「活」了。

第 27 课 默认参数与关键字参数

大多数时候利率是固定的,偶尔才改。给它个默认值:

def zhinajin(jine, lilv=0.05):   # 利率默认 5%
    return jine * lilv

zhinajin(10000)                  # 用默认 → 500.0
zhinajin(10000, 0.1)             # 指定 → 1000.0
zhinajin(lilv=0.1, jine=10000)   # 关键字传参,顺序随意 → 1000.0

按名字传参(lilv=jine=)可以不管顺序,代码也更清楚。

第 28 课 作用域:函数内外的变量

规则:函数里面的变量,外面拿不到;外面的变量,函数里能读。

x = 10          # 全局变量
def f():
    y = 5       # 局部变量
    print(x)    # 能读外面的 → 10
    print(y)    # 能读自己的 → 5

f()
print(y)        # ❌ NameError: name 'y' is not defined

y 是员工自己抽屉里的东西,你(函数外)看不到。方向记一条就够:外面 → 里面能读,里面 → 外面读不到

第 29 课 把「挑欠费」抽成函数

把第 24 课的裸写逻辑,封装成一个能反复用的工具:

def chaxun_qianfei(tenants):
    qianfei = []
    for t in tenants:
        if t["状态"] == "欠费":
            qianfei.append(t["姓名"])
    return qianfei

参数 + return + 循环 + 判断 + 列表——前面学的全在这了。以后任何一份租户名单,都能直接调它查欠费,不用重抄一遍。

这就是函数真正的价值:写一次,用无数次;要改,只改一处。