Python __add__ 整数魔术方法
Python __add__ magic method with integers
当我正在尝试这个时:
>>> "a".__add__("b")
'ab'
正在运行。但是这个
>>> 1.__add__(2)
SyntaxError: invalid syntax
不工作。
这是有效的:
>>> 1 .__add__(2) # notice that space after 1
3
这是怎么回事?它与变量命名规则有关吗?python 是否认为我在不使用 space 时尝试创建变量?
python 词法分析器试图将后跟一个点的整数解释为浮点数。为避免这种歧义,您必须添加额外的 space.
为了比较,相同的代码在双精度上运行没有问题:
>>> 4.23.__add__(2)
6.23
如果将 int 放在括号中,它也有效:
>>> (5).__add__(4)
9
Python 解析器有意保持愚蠢和简单。当它看到 1.
时,它认为你正在处理一个浮点数,而 1._
不是一个有效数字(或者更准确地说,1.
是一个有效的浮点数,你可以' t 跟随一个值 _
:"a" __add__("b")
也是一个错误)。因此,任何明确表明 .
不是数字的一部分的东西都会有所帮助:正如您发现的那样,在点之前有一个 space (因为 space 在数字中找不到,Python 放弃了浮点数的想法并使用整数语法)。括号也有帮助:(1).__add__(2)
。添加另一个点也是如此:1..__add__(2)
(这里,1.
是一个有效数字,然后 .__add__
做通常的事情)。
当你使用 1.
时,解释器认为你开始写浮点数(你可以在 IDE(至少 Pycharm)中看到点是蓝色的,而不是白色的)。 space 告诉它把 1.
当作一个完整的数字,1.0
。 1..__add__(2)
也可以解决问题。
当我正在尝试这个时:
>>> "a".__add__("b")
'ab'
正在运行。但是这个
>>> 1.__add__(2)
SyntaxError: invalid syntax
不工作。 这是有效的:
>>> 1 .__add__(2) # notice that space after 1
3
这是怎么回事?它与变量命名规则有关吗?python 是否认为我在不使用 space 时尝试创建变量?
python 词法分析器试图将后跟一个点的整数解释为浮点数。为避免这种歧义,您必须添加额外的 space.
为了比较,相同的代码在双精度上运行没有问题:
>>> 4.23.__add__(2)
6.23
如果将 int 放在括号中,它也有效:
>>> (5).__add__(4)
9
Python 解析器有意保持愚蠢和简单。当它看到 1.
时,它认为你正在处理一个浮点数,而 1._
不是一个有效数字(或者更准确地说,1.
是一个有效的浮点数,你可以' t 跟随一个值 _
:"a" __add__("b")
也是一个错误)。因此,任何明确表明 .
不是数字的一部分的东西都会有所帮助:正如您发现的那样,在点之前有一个 space (因为 space 在数字中找不到,Python 放弃了浮点数的想法并使用整数语法)。括号也有帮助:(1).__add__(2)
。添加另一个点也是如此:1..__add__(2)
(这里,1.
是一个有效数字,然后 .__add__
做通常的事情)。
当你使用 1.
时,解释器认为你开始写浮点数(你可以在 IDE(至少 Pycharm)中看到点是蓝色的,而不是白色的)。 space 告诉它把 1.
当作一个完整的数字,1.0
。 1..__add__(2)
也可以解决问题。