list = [1, 2, 3]
print(list.append(4)) ## WRONG, print does not work, append() returns None
## RIGHT:
list.append(4)
print(list) ## [1, 2, 3, 4]
私は Python を学んでいますが、この問題が言語に固有のものであるかどうか、およびappend
Python でどのように実装されているかはわかりません。
シーケンスを変更するメソッドが を返すのは、Python の慣習ですNone
。
検討:
>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]
>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}
>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])
Python 3.3 から、これはより明確に文書化されました:
一部のコレクション クラスは可変です。メンバーをその場で追加、削除、または再配置し、特定のアイテムを返さないメソッドは、コレクション インスタンス自体を返すことはありませんが、
None
.
Design and History FAQは、 (リストに関して) この設計上の決定の背後にある理由を示しています:
list.sort(
) がソートされたリストを返さないのはなぜですか?パフォーマンスが重要な状況では、並べ替えるためだけにリストのコピーを作成するのは無駄です。したがって、
list.sort()
リストをその場でソートします。その事実を思い出させるために、ソートされたリストを返しません。このようにして、並べ替えられたコピーが必要であるが、並べ替えられていないバージョンを維持する必要がある場合に、誤ってリストを上書きすることにだまされることはありません。Python 2.4 では、新しい組み込み関数 –
sorted()
– が追加されました。この関数は、提供された iterable から新しいリストを作成し、それをソートして返します。
1 つのアドバイスは、キーワードや関数を変数名として使用しないことです。上記のコードでは、list を変数として使用します。
list = [1, 2, 3]
リストは実際には組み込み型として既に定義されているlist
ため、変数名として使用しないことをお勧めします。ChaseTheSun と squiguy が指摘したように、それ以上のことはありません。
lst = [1, 2, 3]
lst.append(4)
print(lst) ## [1, 2, 3, 4]