2012-03-15 20 views
2

リストを拡張しようとしましたが、結果が値Noneで返されることで困惑しました。私は最終的に問題は終わりに「」への冗長割り当てたことに気づいPythonのリストの拡張と変数の割り当て

>>> a = [1,2] 
>>> b = [3,4] 
>>> a = a.extend(b) 
>>> print a 

None 

:私が試したことは、このでした。だから、これは動作します:

>>> a = [1,2] 
>>> b = [3,4] 
>>> a.extend(b) 
>>> print a 

[1,2,3,4] 

私は理解していない何最初のバージョンは動作しなかった理由です。 'a'への割り当ては冗長でしたが、なぜそれが操作を中断しましたか?

答えて

8

あなたが気づいたように、extendの戻り値はNoneです。これはPython標準ライブラリでよく見られます。破壊的操作はNoneを返します。つまり、値を持たないため、純粋な関数であるかのように使用することはできません。この設計選択のGuido's explanationを読んでください。

などのように、リストのsortメソッドはNoneを返しますが、非破壊的なsorted関数は値を返します。

+0

おかげ@larsmans – monotasker

4

すべてのインプレイス関数がNoneを返すので、引数が変更されていることを強調します。それ以外の場合は、引数が変更されたことを認識せずに戻り値を何かに代入することもできます。 uはあなたがそのように参加することができますしたい場合は単に.extend

+0

おかげでダニエル。もちろんあなたの答えは正しいものでした。私は受け入れるために1つを選択しなければならなかった! – monotasker

0

()はどれも

を返しません。

= A + B

関連する問題