list __iadd __,+ =并返回值

时间:2017-03-29 16:21:17

标签: python list python-3.x

我注意到列表扩展返回值有一些奇怪的行为。

我已阅读此帖子Why does += behave unexpectedly on lists?

但它仍然没有意义。

这就是我所做的:

Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [1, 2]
>>> print(l.extend([1]))
None
>>> print(l.__iadd__([1]))
[1, 2, 1, 1]
>>> print(l += [1])
  File "<stdin>", line 1
print(l += [1])
         ^
SyntaxError: invalid syntax
>>> 

我理解extend不会返回扩展对象,而是None。没有帮助,但我明白了。

现在__iadd__表现不同,这很奇怪,因为我读到这基本上调用了一个列表的扩展。

但第三个让我感到困惑。我认为+=__iadd__的简写,为什么我在这里得到SyntaxError?特别是因为__iadd__返回修改后的列表,这有意义作为返回值传递。但似乎我无法在函数调用中使用+=(或*=,例如使用整数)。

这是设计吗?

2 个答案:

答案 0 :(得分:1)

l.__iadd__(val)是函数调用,即表达式

l += [1]是一项作业,即声明

参数值(在这种情况下你提供给print的参数值)不允许是语句,只有表达式,就像那样简单。

答案 1 :(得分:0)

__iadd__用于实现+=,但两者并不相同。 l += [1]仍然是语句,而l.__iadd__([1])表达式