为什么Python“&=”设置运算符的行为与“&=”整数运算不同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么Python“&=”设置运算符的行为与“&=”整数运算不同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含935字,纯文字阅读大概需要2分钟。
内容图文
![为什么Python“&=”设置运算符的行为与“&=”整数运算不同?](/upload/InfoBanner/zyjiaocheng/825/0916f9af556a4e769f63d1f936640e2f.jpg)
为什么设置操作更改设置?对于同一运算符的整数(按位)版本,它的工作方式不同….
设置操作& =(更改s):
s = set('abc')
t = set('bcd')
u=s
print u, s, t
u &= t
print u, s, t
结果:
set(['a', 'c', 'b']) set(['a', 'c', 'b']) set(['c', 'b', 'd'])
set(['c', 'b']) set(['c', 'b']) set(['c', 'b', 'd'])
按位运算& =(不改变s):
s = 7
t = 3
u=s
print u, s, t
u &= t
print u, s, t
结果:
7 7 3
3 7 3
解决方法:
整数实现&操作但不是& =操作,所以当你使用x& = y时它会扩展到x = x& y只是简单地重新分配x变量而不是修改它的内部状态(对于&变换一个值没有多大意义,就像它没有意义一样).对于frozensets也是如此.
设置实现& =操作,因此它不会扩展为变量重新分配,而是改变运算符的左侧.
元组既不实现&并且& =所以错误是有道理的.但是你得到的效果与=相同:对于tuples =展开,对于列表它是一个就地突变,因为列表是可变的.
任何类都可以实现这些运算符的自己版本.有关详情,请参见here.特别是&对应于__and__和& =对__iand__.
如果你考虑一下,对于可变类来实现就地运算符以允许直接修改,而不是不可变类是一个明智的约定.
内容总结
以上是互联网集市为您收集整理的为什么Python“&=”设置运算符的行为与“&=”整数运算不同?全部内容,希望文章能够帮你解决为什么Python“&=”设置运算符的行为与“&=”整数运算不同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。