python - 如何阻止值返回 'None' ?

标签 python for-loop break

我试图做我正在学习Python的书中的一个练习项目,但我陷入了练习的第二部分,我应该编写一段代码将列表添加到字典中。

为此我尝试编写以下代码:

 def addToInventory(inventory, addedItems):
    for a in addedItems:
                   if a not in inventory:
                       inventory.setdefault(a, 1)

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)

但是,在最后一个 for 循环之后 inventory 将不返回任何内容,因为它已到达列表末尾,但这将导致 inv 为 None 并返回错误。

我在想,当返回值为 none 时,我可以停止代码,我尝试编写一个 elif 语句,但它不起作用。

有什么想法可以做到这一点吗?

P.S:即使很明显,也请不要发布上述完整的代码,我想自己做,我只是在寻找这个问题的答案:)。

最佳答案

您的inv设置为None,因为在Python中,所有不显式返回值的函数都隐式返回无

你定义addToInventory的方式,它会隐式修改inv(注意这种副作用,有时这确实不是你想要或期望的)。

仅用函数调用替换 inv = addToInventory(inv, DragonLoot) 的另一种方法是显式地addToInventory返回库存。由您决定您喜欢哪种风格。

修复:

我知道您要求不要提供完整的代码解决方案,但从您的评论来看,这是我可以足够清楚地解释它的唯一方法。 正如我们在评论中所讨论的,如果练习框架给出了其余代码,则您需要添加显式return。然而,重要的是您在哪里放置该语句。在 Python 中,空白很重要。如果将返回值与 inventory.setdefault 保持一致,它将在循环的第一次迭代期间执行。要让它运行循环然后返回,return 需要与 for 处于相同的缩进级别:

def addToInventory(inventory, addedItems):
    for a in addedItems:
        if a not in inventory:
            inventory.setdefault(a, 1)
    return inventory #<<<<<<< IN LINE WITH THE FOR

关于python - 如何阻止值返回 'None' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519265/

相关文章:

python - Pandas 优雅地处理具有不同日期时间格式的列

python - 尝试从 pygame.midi 继承时出错

python - 有什么简单的方法可以使 python raw_input UI 更像 bash UI 吗?

c - 在 switch 语句中从一个 case 跳转到 default case

do..while 循环中的Continue 和break 语句错误

java - 为什么这个break语句没有按预期工作?

python - 将多个数字写入 .pdf 时出错

java - List<List<Integer>> ArrayList 初始化不适用于 new 运算符 Java

c - c语言战舰程序中的while循环遇到问题

java - 检查 HashMap 中的至少 Value 是否匹配?