评估+ 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
答案 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
。
一元
-
(减号)运算符会产生数字的否定 参数。一元
+
(加号)运算符使其数字参数保持不变。
没有一元/
(除)运算符,因此出错。
相关的“魔术方法”(__pos__
,__neg__
)包含在the data model documentation中。