python表达式中括号的语义是什么?

时间:2017-08-09 08:36:18

标签: python python-2.7

当我用括号包装每个班次时,这个python语句给出了期望值,否则它给出0:

Coef = ((0xFF&resp[0])<<24) + ((0xFF&resp[1])<<16) + ((0xFF&resp[2])<<8) +(0xFF&resp[3])) #OK

Coef = (0xFF&resp[0])<<24 + (0xFF&resp[1])<<16 + (0xFF&resp[2])<<8 +0xFF&resp[3]) #NOK

从我作为C开发人员的角度来看,考虑到 Coef resp 都是 unsigned ints ,这些语句应该是等价的

我的猜测是,当括号不存在时,Python对var的类型感到困惑。

1 个答案:

答案 0 :(得分:5)

与类型无关; +的优先级高于<<。 (在C中也是这种情况。)您的表达式被解析为:

((0xFF & resp[0])
    << (24 + (0xFF & resp[1]))
    << (16 + (0xFF & resp[2]))
    << (8 + 0xFF & resp[3]))

此外,如果respbytes 很有可能),您可以:

int.from_bytes(resp[:4], 'big')

如果 因某种原因使用Python 2,struct.unpack可以完成相同的工作:

Coef, = struct.unpack('>I', resp[:4])