🐸

双份回礼

数据与文本工具python-data-tinkerer-16-the-twin-return
奖励: 110 XP
|

双份回礼

返回之路打通后,Hoppy 继续在工匠台前工作。这次它不只是算一盏灯的亮度,而是在把火花石分装成小护符。一次分装结束后,台面上自然会留下两样东西:做好的护符数量,以及还没凑够下一枚护符的剩余火花石。

这节课要补上的直觉是:一个函数也可以把两个相关结果一起交回来。只要它们属于同一个小任务,就不必拆成两次调用或两段无关代码。

一个小任务,可能天然会产出两份结果

把火花石按固定份数装进护符时,你通常会同时关心两件事:ready_charms 有多少,以及 spare_stones 还剩多少。这两个结果来自同一个分装动作,所以让函数一次把它们都交回来,反而最自然。

spark_stones = 9
stones_per_charm = 4


def split_charm_batch(spark_stones, stones_per_charm):
  ready_charms = spark_stones // stones_per_charm
  spare_stones = spark_stones % stones_per_charm
  return ready_charms, spare_stones


ready_charms, spare_stones = split_charm_batch(spark_stones, stones_per_charm)

print("Ready charms:", ready_charms)
print("Spare stones:", spare_stones)

这里并不是在讲什么新的复杂理论,而是在练一个很实用的动作:函数做完一个小任务后,可以把两份彼此相关的结果一起交回来;外面的代码也可以用两个变量把它们一起接住。

一起返回,也要一起接住

今天最重要的不是“记住可以返回多个值”这句话本身,而是看清它为什么合理:护符数量和剩余火花石本来就是同一批分装的两个产物。所以你会同时 return ready_charms, spare_stones,也会同时用 ready_charms, spare_stones = ... 把它们接住。

1
让函数把两份结果一起交回来

starter 已经算出了 ready_charmsspare_stones。现在把函数里的打印改成 return ready_charms, spare_stones

2
用两个变量一起接收返回值

在函数外调用一次 split_charm_batch(spark_stones, stones_per_charm),并用 ready_charms, spare_stones 这两个变量把结果一起接住。

3
运行后观察两条输出线

运行后,你会同时看到做好的护符数量和剩余火花石数量。它们来自同一次函数调用,这就是“双份回礼”的感觉。

什么时候适合双返回?

当一个函数完成的是同一个小任务,而你自然会关心它产出的两份相关结果时,就很适合一起返回。重点不是“多”,而是“相关”。

参考答案
点击展开
参考答案:
spark_stones = 14
stones_per_charm = 4


def split_charm_batch(spark_stones, stones_per_charm):
  ready_charms = spark_stones // stones_per_charm
  spare_stones = spark_stones % stones_per_charm
  return ready_charms, spare_stones


ready_charms, spare_stones = split_charm_batch(spark_stones, stones_per_charm)

print("Ready charms:", ready_charms)
print("Spare stones:", spare_stones)
高级技巧
想更进一步?点击展开

这一课只守住一个很窄但很实用的边界:一个函数可以把两份相关结果一起交回来,外面再用两个变量接住它们。我们没有展开高级解包,也没有把它讲成 tuple 理论课,因为今天真正要建立的是“小任务可能有两个天然产物”的直觉。

再往下一步,你会看到有些函数不只交回一两个散落的值,而会直接交回一张更整洁的小报告。这就是下一课要走的方向。

Loading...
终端输出
Terminal
Ready to run...