2

私は理解できないこの状況に直面しました:

In [3]: nk1=range(10)

In [4]: nk2=range(11,15)

In [5]: nk1.extend(nk2)

In [6]: nk1
Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]

In [7]: dir(range(10))==dir(list)==dir(range(11,15))==dir(nk1)==dir(nk2)
Out[7]: True

In [8]: print range(10).extend(range(11,15))
None

上記でわかるように、nk1 を簡単に拡張できますが、最後のステートメントが返されないのはなぜNoneですか??
なぜ入力に返さNoneれるのですか(すべてが同じであることがわかります)??? だから私はそれを拡張するために常にインスタンスを作成する必要がありますか??? Python ドキュメントから; 私はこれを見つけまし; しかし、上記のケースがどのように起こったのかわかりません。In[8]In[7]
range

4

2 に答える 2

5

リストを拡張すると、リストはその場で変更されます。新しいリストは返されません。

インプレース変更は、呼び出しているメソッドのオブジェクトが、そのメソッドの実行中にそれ自体に変更を加えることを示します。ほとんどの場合(現在発生している混乱を避けるため)、これらのタイプの操作は、操作を実行したオブジェクトを返しません(例外はありますが)。次のことを考慮してください。

list1 = range(10)
list2 = range(10) + range(11,15) # no in place modification here.
nolist1 = list1.extend(range(11,15)) # list1 is now (0 ... 14)
nolist2 = range(10).extend(range(11,15)) # Nothing actually happens here.

最後の例では、range関数は何にも割り当てられていないリストを返します。次に、そのリストが拡張され、その結果が。の戻り値になりNoneます。これが印刷されます。

于 2013-01-07T04:38:56.233 に答える
0

range()新しく作成されたリストへのハンドルを提供します。変更する必要がある場合は、ハンドルを変数に格納する必要があります。

extend何も返さないため、「なし」とは出力されません。range() を使用しているため、出力を直接取得する方法はありません。

nk1 = range(10)
nk1.extend(range(11,15))
print nk1
于 2013-01-07T04:45:52.550 に答える