🐸

伸缩收纳盒

Python 基础python-architect-03-flex
奖励: 120 XP
|

未知的战利品

冒险归来,Hoppy 需要把战利品存入仓库。但问题来了:有时候他只捡到 1 颗宝石,有时候是 3 把剑,有时候是一大堆杂物。

如果我们定义 save(item1),那捡到两个物品时就会报错。如果我们定义 save(item1, item2),那捡到一个物品时又会报错。

“我需要一种能自动伸缩的盒子,”Hoppy 说道,“不管我往里面塞多少东西,它都能装下。”

伸缩收纳盒 (*args)

在参数名前加一颗星星 *,这个参数就会变成一个神奇的收纳盒(魔法术语叫 元组 Tuple)。

def save_loot(*items):
  print("收到了 " + str(len(items)) + " 件物品:")
  for item in items:
      print("- " + item)

现在,你可以随意调用它:

  • save_loot("Gold") (装 1 个)
  • save_loot("Sword", "Shield", "Potion") (装 3 个)
  • save_loot() (空的也行!)

你的任务

工坊里有一个现成的仓库系统 inventory.py

1
连接仓库

在第一行 import inventory

2
可以伸缩的搬运工

定义一个名为 store_all 的函数,使用 *loots 作为参数。

3
批量入库

在函数内部,写一个 for 循环遍历 loots。对于每一个 loot,调用 inventory.add(loot)

4
实战测试

调用 store_all("Diamond", "Ruby", "Sapphire") 一次性存入三颗宝石。

星星只在定义时

注意:星号 * 只在定义函数 (def) 时需要写。在使用变量 (for 循环) 时不需要写星号!

参考答案
点击展开
参考答案:
import inventory

def store_all(*loots):
  for loot in loots:
      inventory.add(loot)

store_all("Diamond", "Ruby", "Sapphire")
高级技巧
想更进一步?点击展开

F. 现实桥接 (Bridge to Reality)

  • 伸缩收纳盒 = 可变参数 (Variable Arguments),常缩写为 args
  • 星星 (*) = 解包操作符 (Unpacking Operator)
  • 当你不知道用户会传多少参数时(比如 print() 函数可以打印任意多个变量),这个技巧非常有用。
Loading...
终端输出
Terminal
Ready to run...