如何在Python中评估+5?

时间:2015-05-24 10:09:33

标签: python operators addition

评估+ 5的工作原理(扰流警报:结果为5)?

通过调用某些内容的+方法,__add__是否正常工作? 5中的“other”:

>>> other = 5
>>> x = 1
>>> x.__add__(other)
6

那么允许添加5?

的“void”是什么?

void.__add__(5)

另一个线索是:

/ 5

抛出错误:

TypeError: 'int' object is not callable

3 个答案:

答案 0 :(得分:7)

在这种情况下,+会调用一元魔术方法__pos__而不是__add__

>>> class A(int):
    def __pos__(self):
        print '__pos__ called'
        return self
...
>>> a = A(5)
>>> +a
__pos__ called
5
>>> +++a
__pos__ called
__pos__ called
__pos__ called
5

Python仅支持4 {(一元算术运算)__neg____pos____abs____invert__,因此SyntaxError {{1} }}。请注意/使用一个名为abs()的内置函数,即没有这个一元操作的运算符。

请注意,__abs__/5后跟某些内容)仅对IPython shell有不同的解释,对于普通shell,它是预期的语法错误:

/
Ashwinis-MacBook-Pro:py ashwini$ ipy
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
Type "copyright", "credits" or "license" for more information.

IPython 3.0.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
>>> /5
Traceback (most recent call last):
  File "<ipython-input-1-2b14d13c234b>", line 1, in <module>
    5()
TypeError: 'int' object is not callable

>>> /float 1
1.0
>>> /sum (1 2 3 4 5)
15

答案 1 :(得分:7)

看起来你找到了三个unary operators中的一个:

  • 一元加操作+x调用 __ pos __()方法。
  • 一元否定操作-x调用 __ neg __()方法。
  • 一元不(或反转)操作~x调用 __ invert __()方法。

答案 2 :(得分:6)

根据language reference on numeric literals

  

请注意,数字文字不包含符号;像-1这样的词组   实际上是一个由一元运算符-组成的表达式   文字1

section on unary operators

  

一元-(减号)运算符会产生数字的否定   参数。

     

一元+(加号)运算符使其数字参数保持不变。

没有一元/(除)运算符,因此出错。

相关的“魔术方法”__pos____neg__)包含在the data model documentation中。