Python x 和 +x 何时不相等?

每个人都觉得 x==+x,而且在 Python 中,几乎所有的情况下都是这样。但是,在 Python 的标准库中找到两例 x!=+x 的情况。

第一例和 decimal.Decimal 类有关。如果 x 是 Decimal 实例,在算术运算的上下文中创建,然后在不同的上下文中计算 +x,那么 x!=+x,例如,x所在的上下文使用某个精度,而计算+x时,精度变了。

import decimal
from collections import Counter

# 获取当前全局算术运算的上下文引用
ctx = decimal.getcontext()
# 把算法运算上下文的精度设为40
ctx.prec = 40
# 使用当前精度计算的1/3
one_third = decimal.Decimal('1') / decimal.Decimal('3')
print(one_third)
print(one_third == +one_third)

# 把精度降为28,这是Python3.4为 Decimal 算术运算设定的默认精度
ctx.prec = 28
print(one_third == +one_third)
print(+one_third)
0.3333333333333333333333333333333333333333
True
False
0.3333333333333333333333333333

第二例在 collections.Counter 的文档中,Counter类实现了几个算术运算符,例如中缀运算符+,作用是把两个Counter实例的计数器加在一起,然后,从使用角度出发,Counter 相加时,负值和零值计数会从结果中剔除,因此产生一个新的Counter且仅保留大于零的计数器。

ct = Counter('abcdhbcans')
print(ct)
ct['h'] = -3
ct['d'] = 0
print(ct)
print(+ct)
Counter({'b': 2, 'a': 2, 'c': 2, 'h': 1, 'd': 1, 's': 1, 'n': 1})
Counter({'b': 2, 'a': 2, 'c': 2, 's': 1, 'n': 1, 'd': 0, 'h': -3})
Counter({'c': 2, 'b': 2, 'a': 2, 'n': 1, 's': 1})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值