7

Pythonで次のコードを実行した場合、

var = [0].extend(range(1,10))

次にvar、値が 0 ~ 9 のリストになります。

何を与える?

4

4 に答える 4

10

list.extend is an in-place method. It performs its action on the object itself and returns None.

This would work:

var = [0]
var.extend(range(1, 10))

Even better would be this:

var = list(range(10))
于 2012-07-20T21:21:37.810 に答える
6

extend() doesn't return anything (actually None), it does the change "in-place", i.e., the list itself is modified.

I think you are after this:

>>> var = [0]
>>> var.extend(range(1, 10))
>>> var
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2012-07-20T21:22:00.933 に答える
4

問題のコードが機能するには、次のようなことを行う必要があります。

>>> var = [0]
>>> var.extend(range(1,10))
>>> var
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

extend()がを返すため、以前は機能していませんでした。これはNone仕様によるものです。Pythonはコマンド/クエリ分離を順守しています。

于 2012-07-20T21:23:11.597 に答える
3

オスカー・ロペスらがすでに説明しているように、extend はコマンドとクエリの分離を順守するために、None を返すコマンドです。

彼らは皆、意図したとおり、extend をコマンドとして使用してこれを修正することを提案しました。ただし、代替手段があります。代わりにクエリを使用します。

>>> var = [0] + range(1, 10)

ここで違いを理解することが重要です。extendあなたの を変更し、[0]に変えます[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。しかし、+演算子はあなた[0]を放っておいて、新しい list を返します[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

リストへの他の参照があり、それらすべてを変更したい場合は、明らかに必要extendです。

ただし、値として [0] を使用しているだけの場合、使用+するとコンパクトで流動的なコードを記述できるようになるだけでなく (しようとしていたように)、値の変更も回避できます。これは、リストの代わりに不変値 (タプルなど) を使用している場合でも同じコードが機能することを意味しますが、さらに重要なことは、副作用を回避する関数型プログラミングのスタイルにとって重要なことです。(このスタイルが便利な理由はたくさんありますが、明らかな理由の 1 つは、不変オブジェクトと副作用のない関数が本質的にスレッドセーフであることです。)

于 2012-07-20T22:12:28.780 に答える