高级 Python 开发课程
第 章
>
第 级
高级函数
部分函数
目标
使用偏函数打包并放置被运送到码头的建筑材料。
一些物资刚刚被运送到码头,它们需要被打包并储存,以便作为建筑材料使用。这些材料需要用布包裹,并用线绑起来。在打包时称量所有物品非常重要,以便它们能够在之后有效运输。为了简化这一过程,我们可以使用 偏函数 来优化该过程。
偏函数 是一种自定义函数,通过不需要添加大部分一致的参数值来实现简化。这使得你可以使用需要多个参数的函数,并只用单个参数或者你选择的任意数量的参数来执行这些函数。
from functools import partial
首先,你必须从名为 functools 的模块中导入 partial,这将允许你创建 偏函数。导入代码通常放在代码编辑器的顶部。
设置一个名为 weight 的函数,并让它接受三个(3)参数:thread、cloth 和 material。该函数将允许你计算打包材料的重量,我们可以通过偏函数进一步优化这个过程。
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
创建一个名为 package 的 偏函数,其设置过程类似于 lambda 函数。使用 partial() 来初始化函数,并添加函数名以及你想要指定的参数的固定值。
原始函数中你未指定的任何参数,都将变成必须由 偏函数 指定的参数。在 package() 这个 偏函数 的情况下,未指定的是 material 参数。
走到箱子前深色标记 X 的位置获取包装材料。在黄色地毯的 X 标记处,使用 collect() 函数获取 "thread",然后走到紫色地毯的 X 标记处,使用 collect() 函数获取 "cloth"。这些物品将用于包装材料。
穿过码头收集所有建筑材料,这些材料包括:bricks、planks、red_bricks 和 wood。收集后,将每种材料的数量存入以该材料命名的变量中,例如:bricks = 3。
随后,走到箱子前浅色标记的 X 处,在存储之前计算每种建筑材料的重量。使用 speak() 函数配合 package() 偏函数 来计算重量。将材料变量作为 package() 函数的参数,例如:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
接着,使用 place() 函数将材料存放到箱子内,同样使用 package() 函数,就像上面的例子一样。
在带有 red 地毯的浅色 X 标记处,称量并存放 bricks。在带有 blue 地毯的浅色 X 标记处,称量并存放 planks。在带有 orange 地毯的浅色 X 标记处,称量并存放 red_bricks。在带有 green 地毯的浅色 X 标记处,称量并存放 wood。将所有四种材料正确地称量并存放到相应的箱子中,以完成关卡。