1

私の理解では、Python ジェネレーターの式は遅延評価された内包表記を返し、基になる辞書が変更されると辞書のビュー オブジェクトが更新されます。

次のコードが与えられた場合 (Python 2.7.6 Windows):

d = {}
gt_three = (x for x in d.viewkeys() if x > 3)
print list(gt_three)
d[1] = 'one'
d[4] = 'four'
print list(gt_three)

次のような出力が期待されます。

[]
[4]

代わりに、私は受け取っています:

[]
[]

ディクショナリに追加した後にジェネレーターを再作成するか、ビュー自体を印刷すると、期待される出力が表示されます。ジェネレーターについて理解していないことは何ですか? 私はpythonが初めてです。

4

1 に答える 1

0

ジェネレーター式は反復子を返します。反復子は 1 回だけ反復できます。最初のイテレータの後にイテレータを反復しようとすると、常に空と見なされます。

于 2014-02-17T11:29:26.470 に答える