python - 这是什么意思?“在 x += 1 中, x 只被评估一次。”
问题描述
我无法理解有关评估的解释。
正常作业和增强作业之间有什么区别?
我知道就地行为。
https://docs.python.org/3/reference/simple_stmts.html#grammar-token-augmented-assignment-stmt
像 x += 1 这样的扩充赋值表达式可以重写为 x = x + 1 以实现类似但不完全相等的效果。在增强版本中,x 只被评估一次。此外,如果可能,实际操作会在原地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。
解决方案
对于一个简单的变量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
推荐阅读
- amazon-web-services - AWS Lambda 函数:900 秒后超时
- jsf - p:selectBooleanCheckbox *look only* 在向 ap:dataTable 添加行后移动
- java - 我们能在堆转储文件中找到哪个线程持有锁吗
- mysql - 将 FORMAT_DATETIME 与 Tableau 和 BigQuery 结合使用
- java - 为什么这个程序给出“除以零”错误?
- python - 大熊猫 groupby 的总和
- hazelcast - 设置 Hazelcast 集群成员的属性
- sql - Oracle 中 MS SQL 表的 sys.allocation_units 替代表是什么?
- react-native - 如何修复在本机反应中呈现平面列表?
- django - Django:为什么通过社交身份验证登录后关联了错误的用户?