【发布时间】:2020-08-08 20:04:06
【问题描述】:
available_items = {"health potion": 10, "cake of the cure": 5, "green elixir": 20, "strength sandwich": 25, "stamina grains": 15, "power stew": 30}
health_points = 20
health_points += available_items.pop("stamina grains")
当我运行此代码时,会添加键“stamina grains”的值,并从字典 available_items 中删除 stamina grains。
但是 Python 从左到右计算表达式,因此它应该首先删除关键的“stamina grains”,因此应该没有任何内容添加到health_points。
我对 Python 如何评估表达式感到困惑。有人可以澄清一下并给我一些关于 Python 如何评估表达式的资源吗?
【问题讨论】:
-
字典的
.pop()方法显式返回与它删除的键对应的值 - 这就是该方法的重点。在这种情况下,返回值只是整数15,它不需要键的持续存在才能自身存在。 -
pop的任务是返回与键关联的值并从字典中删除键。最后发生的事情是将结果(在右侧计算)对左侧变量的影响。见the doc on evaluation order -
顺便说一句,您的代码使用
health_points += available_items.pop("stamina grains",0)会更加健壮。使用 0 进行更新,而不是在出于任何原因没有该项目时抛出 KeyError
标签: python python-3.x expression-evaluation