首页 > 解决方案 > 这是什么意思?“在 x += 1 中, x 只被评估一次。”

问题描述

我无法理解有关评估的解释。

正常作业和增强作业之间有什么区别?

我知道就地行为。

https://docs.python.org/3/reference/simple_stmts.html#grammar-token-augmented-assignment-stmt

像 x += 1 这样的扩充赋值表达式可以重写为 x = x + 1 以实现类似但不完全相等的效果。在增强版本中,x 只被评估一次。此外,如果可能,实际操作会在原地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。

标签: python

解决方案


对于一个简单的变量x,没有什么要评估的。当x是一个表达式时,可以看到差异。例如:

some_list[get_index()] = some_list[get_index()] + 1
some_list[get_index()] += 1

第一行将调用get_index()两次,但第二行调用一次。

提到的第二个区别是何时x是一个可变对象,如列表。在这种情况下x,可以就地改变而不是创建新对象。因此,例如lst = lst + [1,2]必须将整个列表复制到新列表,但lst += [1,2]会改变列表本身,这可能无需复制即可完成。它还会影响其他引用是否lst看到更改:

lst = [1,2,3]
lst2 = lst
lst += [4]         # Also affects lst2
lst = lst + [5]    # lst2 is unchanged because lst is now a new object

推荐阅读