【Python】リスト型に対するメソッドの戻り値

こんにちは、ウヤルームのうや(@uyaroom)です!
Pythonのリスト型に対するメソッドを雰囲気で使って少しハマったので共有です。

元のリストを書き換えるメソッドの戻り値はNone

例えば以下のように、リストを定義する時に別のリストを連結して、、
みたいなことをやると、Noneなリストが作成されます。

失敗例

原因は単純で、extendメソッドは必ずNoneを返すためです。
回避するには以下のようにリスト宣言とメソッド実行を分ける必要があります。

成功例

なお、この仕様はextendだけではなく、以下のメソッドにも共通です。

  • append
  • insert
  • remove
  • clear
  • sort
  • reverse

メソッドの戻り値がNoneな理由

PythonはCommand–query separationの原則に従っており、
これらが破壊的なメソッドであることをプログラマに意識させるために
あえてこのような仕様にしているみたいです。

メソッドを使わず直感的に書くほうが良いかも

演算子を使うことでメソッドを使わずに表現することもできます。このほうが直感的でわかりやすいかもしれません。

参考

リストのappendメソッドはNoneを返す

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です