分析序列的增量赋值*=,+=

1. 增量赋值操作

如 *=   +=

2. 可变序列和不可变序列对于增量赋值的实现

对于可变序列,如list,bytearrary和array.aray(实现了__iadd__, __imul__,就地运算),增量运算后,新元素追加到可变序列后,该序列的ID不变
对于不可变序列,没有实现上述方法,就需要创建个新对象,然后赋值,如a+=b,相当于a=a+b
例子:
>>> l=[1,2,3]
>>> id(l)
47410632218312
>>> l*=2
>>> id(l)
47410632218312
>>> l
[1, 2, 3, 1, 2, 3]
>>> t=(1,2,3)
>>> id(t)
47410559333872
>>> t*=3
>>> id(t)
47410627604688
>>> t
(1, 2, 3, 1, 2, 3, 1, 2, 3)
对不可变序列进行重复拼接操作的话,效率会很低,因为每次都要新创建一个对象,解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素。

3. 注意

str 是个例外,因为对字符串做+=太普遍,所以CPython对它进行了优化。为str初始化内存的时候,程序会为它留出额外的可扩展空间,因此增量操作的时候,并不会涉及复制原有字符串到新对象的操作。

增量赋值不是一个原子操作,例子如下,虽然会报错,但还是完成了操作:
>>> t
(1, 2, [10, 20])
>>> t[2]+=[30,40]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, [10, 20, 30, 40])


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,通常使用循环计数器来追踪循环的迭代次数。循环计数器是一个变量,它在每次迭代时都会被更新。在 `idx += 1` 这个表达式中,`idx` 就是循环计数器,`+=` 是一个简写形式,表示将变量 `idx` 的值加 1,然后将结果赋值给 `idx`。 如果你想在循环中辨别 `idx += 1` 的循环计数条件,可以查看循环计数器的初始值、增量和终止条件。通常,循环计数器的初始值是 0 或 1,增量是 1,终止条件是一个布尔表达式,用于控制循环何时停止。 以下是一个 `idx += 1` 循环计数条件的示例代码,它使用 for 循环遍历一个列表,并在每次迭代时打印列表中的元素和当前的迭代次数: ```python numbers = [10, 20, 30, 40, 50] for idx in range(len(numbers)): print("第", idx+1, "个元素是", numbers[idx]) # 检查循环是否达到最大迭代次数 if idx >= len(numbers) - 1: print("已经处理完所有元素。") break ``` 在这个例子中,我们使用 `range(len(numbers))` 来生成一个包含列表元素数量的序列,然后使用 for 循环遍历这个序列。在每次迭代时,我们打印当前的迭代次数和对应的元素值,并检查计数器变量 `idx` 是否达到了列表的最后一个元素。如果是,我们就打印一条消息并使用 break 语句退出循环。 在这个例子中,可以看到 `idx += 1` 是在 for 循环的头部执行的,它的作用是追踪循环迭代次数。循环终止条件是 `idx >= len(numbers) - 1`,它保证了循环在处理完所有元素后会退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值