我注意到列表扩展返回值有一些奇怪的行为。
我已阅读此帖子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__
返回修改后的列表,这有意义作为返回值传递。但似乎我无法在函数调用中使用+=
(或*=
,例如使用整数)。
这是设计吗?
答案 0 :(得分:1)
l.__iadd__(val)
是函数调用,即表达式。
l += [1]
是一项作业,即声明。
参数值(在这种情况下你提供给print
的参数值)不允许是语句,只有表达式,就像那样简单。
答案 1 :(得分:0)
__iadd__
用于实现+=
,但两者并不相同。 l += [1]
仍然是语句,而l.__iadd__([1])
是表达式。