私はリスト拡張の戻り値でいくつかの奇妙な動作に気付きました。リスト__iadd__、+ =と戻り値
私は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__
が異なる動作をします。これは、基本的には、リストの拡張を呼び出していることがわかります。
しかし、第3のものが私を困惑させる。私は+=
が__iadd__
の略語だと思ったのですが、なぜSyntaxError
がここにありますか?特に__iadd__
が変更されたリストを返すので、戻り値として渡すのが理にかなっています。しかし、私は関数呼び出しで+=
(またはそれについては*=
、例えば整数)を使うことはできないようです。
これは仕様によるものですか?
ありがとうございました。私はこの区別を認識していませんでした。とても興味深い。他の誰も知らなかったなら、[ここにある](http://stackoverflow.com/questions/4728073/what-is-the-difference-between-an-expression-and-a-statement-in-python)a良い説明。 – Niko
@Nikoさらに詳しい技術情報に興味があるなら、Pythonには、[リファレンスマニュアル](https://docs.python.org/3/reference/index.html)に式と単純な複合文の3つの完全な章があります。後でいくつかの点をブックマークしたいかもしれません:-) –