为什么在int.to_bytes中不能省略括号?

时间:2014-04-05 02:28:01

标签: python

>>> 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 个答案:

答案 0 :(得分:1)

因为3.本身是十进制(浮点类型)数。因此3.to_bytes被解析为(3.)to_bytes无效。所以你需要说(3).to_bytes给你想要的意思。

答案 1 :(得分:1)

如果没有括号,Python会尝试将3.to_bytes解析为浮点数;也就是说,当您尝试访问没有点的3.<something>时,它会尝试to_bytes并且语法失败。

如果添加一个额外的点,它将完成float的解析并尝试访问该方法,该方法不存在:

>>> 3..to_bytes(2, "big")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'to_bytes'

如果你在括号中有它,因为它没有尝试制作浮点数。你也可以用空格来运行它来解决这个问题:

>>> 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()