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

1 投票
2 回答
1059 浏览
提问于 2025-04-18 01:26
>>> 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() 时不会看到这个问题。

撰写回答