1

私はPythonを初めて使用し、Sublime Textプラグインのコードを読んでいて、なじみのないコードに出くわしました。

views = [v for v in sublime.active_window().views()]

わからないのは「[vforv」の部分です。このコードは一体何をしているのでしょうか?

前もって感謝します!

4

2 に答える 2

9

それはリスト内包です。これは次と同等です(ただし、より効率的です)。

views = []
for v in sublime.active_window().views():
    views.append(v)

この場合、それらは使用する必要があることに注意してくださいlist

views = list(sublime.active_window().views())

python2.7で導入された他のタイプの理解があります:

集合の内包的包摂:

{x for x in iterable}

と口述の理解:

{k:v for k,v in iterable_that_yields_2_tuples}

したがって、これは、すべての値が1である辞書を作成する非効率的な方法です。

{k:1 for k in ("foo","bar","baz")}

最後に、pythonはジェネレーター式もサポートしています(少なくともpython2.6で使用可能です-いつ導入されたかはわかりません):

(x for x in iterable)

これはリスト内包表記のように機能しますが、反復可能なオブジェクトを返します。ジェネレーターは、実際にそれらを反復処理するまで、特に有用ではありません。利点は、ジェネレーターがその場で値を計算することです(後で繰り返すことができるリストに値を格納するのではなく)。それらはメモリ効率が高いですが、状況によってはリスト内包よりも実行が遅くなります-他の状況では、言うのが簡単なのでリスト内包よりも優れています-最初の3つの要素を教えてください-リスト内包では、すべての要素を事前に計算する必要がありますが、これはコストのかかる手順になる場合があります。

于 2013-02-14T16:47:40.733 に答える
4

これはリスト内包です。これは、インラインforループを使用した式に少し似ており、その場でクイックリストを作成するために使用されます。この場合、によって返されるリストの浅いコピーを作成していsublime.active_window().views()ます。

各値を変換する必要がある場合、リスト内包表記は本当に輝いています。たとえば、最初の10個の完全な平方を取得するための簡単なリスト内包は次のとおりです。

[x*x for x in range(1,11)]
于 2013-02-14T16:50:22.037 に答える