为什么int.to_bytes中的括号不能省略?
>>> x=3
>>> x.to_bytes(2,"big")
b'\x00\x03'
>>> 3.to_bytes(2,"big")
File "<stdin>", line 1
3.to_bytes(2,"big")
^
SyntaxError: invalid syntax
>>> (3).to_bytes(2,"big")
b'\x00\x03'
为什么我不能省略括号 3.to_bytes(2,"big")
?这个括号在这里有什么作用呢?
2 个回答
1
因为 3.
本身是一个小数(浮点数)。所以 3.to_bytes
被解析成 (3.)to_bytes
,这是不合法的。因此,你需要写成 (3).to_bytes
,这样才能让点的意思变得清楚。
1
如果没有括号,Python会把 3.to_bytes
当成一个浮点数来解析,也就是说,它会试图把 3.<某个东西>
变成一个有效的表达式,但这样会出错,因为你在没有点的情况下访问 to_bytes
。
如果你多加一个点,它就会完成浮点数的解析,然后尝试去访问这个方法,但这个方法并不存在:
>>> 3..to_bytes(2, "big")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'to_bytes'
如果你把它放在括号里,Python就不会试图把它当成浮点数来处理,所以就不会出错。你也可以通过加个空格来解决这个问题:
>>> 3 .to_bytes(2, "big")
b'\x00\x03'
>>> 3.to_bytes(2, "big")
File "<stdin>", line 1
3.to_bytes(2, "big")
^
SyntaxError: invalid syntax
当你把 int
存储在一个变量里时,Python就不会把它当成 float
来解析,这就是为什么你在使用 x.to_bytes()
时不会看到这个问题。