Python 编程

函数进阶:一次返回多个值

10 分钟

函数可以一次交还好几件成品:第一章的函数只 return 一个值,其实 return 后面写一串也行:

def analyze(scores):
    return max(scores), min(scores), sum(scores) / len(scores)

调用时 hi, lo, avg = analyze([88, 92, 75]) 一次接住三个值——上一讲说了,这背后就是元组解包。看《动手学深度学习》时,model(x) 常常同时返回预测和中间结果,就是这个写法。

lambda 是一次性小函数:有些函数只用一次,不值得起名字,lambda 来帮忙——sorted(students, key=lambda s: s['age']) 表示「按每个学生的 age 排序」。lambda 后面是参数,冒号后是返回值,读作「给我一个 s,我还你 s 的 age」。

作用域:变量的活动范围:函数内部定义的变量,出了函数就不存在,像教室里传的纸条,下课就作废。函数里能读到外面的变量,但想改外面的要格外小心。这条规矩保护了程序:函数内部怎么折腾,不会意外弄乱外面的世界。

类比:把函数想成外卖——下单(传参)后厨房(函数体)忙活,送到你手上的(返回值)才是你拥有的;厨房里的锅碗瓢盆(内部变量)你碰不到。

常见误区:在函数里直接改传入的列表,以为外面不受影响——列表是「同一个盒子」,函数里改了外面也变。不想改就传副本:f(scores.copy())。

练一练:写一个函数返回全家身高的最高、最矮和平均,解包后用 f 字符串打印成一句话。

小纸条

写函数一次返回身高的最高、最矮、平均并解包打印

登录 后可看答案