为什么设置操作更改设置s?对于同一运算符的整数(按位)版本,它的工作方式不同....
设置操作&=(更改s):
s = set('abc')
t = set('bcd')
u=s
print u, s, t
u &= t
print u, s, t
Run Code Online (Sandbox Code Playgroud)
结果:
set(['a', 'c', 'b']) set(['a', 'c', 'b']) set(['c', 'b', 'd'])
set(['c', 'b']) set(['c', 'b']) set(['c', 'b', 'd'])
Run Code Online (Sandbox Code Playgroud)
按位运算&=(不变s):
s = 7
t = 3
u=s
print u, s, t
u &= t
print u, s, t
Run Code Online (Sandbox Code Playgroud)
结果:
7 7 3
3 7 3
Run Code Online (Sandbox Code Playgroud)
整数实现&操作但不实现&=操作,所以当你使用x &= y它时会扩展到x = x & y简单地重新分配x变量而不是修改它的内部状态(&改变一个值没有多大意义,就像它没有意义一样for +).对于frozensets也是如此.
设置实现&=操作,因此它不会扩展为变量重新分配,而是改变操作符的左侧.
元组既不实现,&也不实现&=错误.但是你会得到同样的效果+=:对于元组+=扩展,对于列表它是一个就地突变,因为列表是可变的.
任何类都可以实现这些运算符的自己版本.详情请见此处.特别是&对应于__and__与&=给__iand__.
如果你考虑一下,对于可变类来实现就地运算符以允许直接修改,而不是不可变类是一个明智的约定.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |