高级 Python 开发课程
第 章
>
第 级
高级函数
可变参数函数
目标
利用可变参数函数抓取仓库内所有的消耗品,并将它们打包进储物箱中。
仓库中存放着几种食物,需要打包以便运输销售。为了提高效率,你可以创建带有可变参数的自定义函数。这些函数没有固定的参数数量,允许你根据执行函数操作的需要传入任意数量的参数。
根据你想要实现的功能,有两种向函数添加可变参数的方法。第一种方法是创建一个参数列表,不是列出多个参数名,而是在一个参数名前加上星号。这会自动创建一个列表。
def custom_function(message,*arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala","one","two","three")
# The message "lalala" is printed on screen
# Value now returns the list ("one","two","three")
第二种方法是将参数放入字典中,而不是列表中,这与前一种方法类似,但不是使用一个星号,而是使用两个星号。这会自动创建一个字典而不是列表。
def custom_function(message,**arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala", one = 1, two = 2, three = 3)
# The message "lalala" is printed on screen
# Value now returns the dictionary:
# {'one': 1, 'three': 3, 'two': 2}
为了将所有物品打包发货,请创建两组自定义函数,一组用于打包单个物品,另一组用于打包多个物品。利用可变参数将各种物品组合打包,而无需编写过多函数。
def pack_singles(name,*items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
def pack_multi(name,**items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
场地上有四种不同的物品:"jars"、"eggs"、"berries" 和 "fruit"。收集仓库中的所有物品,并朝着运输通道上的 X 标记方向走去。走向较深的 X 标记,并使用 pack_singles 函数打包 "jars" 和 "eggs"。
对于 "jars",你需要收集四种类型,并作为参数传入,分别是 "white"、"purple"、"red" 和 "brown"。这些将存储在 green carpet 旁的容器中。代码写法如下: pack_singles("jars", "white", "purple", "red", "brown")
对于 "eggs",你需要收集三种类型,并作为参数传入,分别是 "white"、"green" 和 "blue"。这些将存储在 orange carpet 旁的容器中。格式与之前的设置相同。
之后,走向较亮的 X 标记,并使用 pack_multi 函数打包 "berries" 和 "fruit"。对于 "berries",你需要收集三种类型,并作为参数传入,分别是 "red"、"blue" 和 "purple"。这些将存储在 blue carpet 旁的容器中。你需要为每种类型添加所收集的数量,如下所示: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
对于 "fruit",你需要收集四种类型,并作为参数传入,分别是 "apple"、"pear"、"orange" 和 "peach"。这些将存储在 red carpet 旁的容器中。使用与之前相同的格式,确保收集并存储所有物品以完成这一关。