ぷちPython講座:リスト内包 • リスト内包 :ルールから配列を作る – for ループを書かなくていい – R の apply() 系の関数に相当 a = [] for x in xrange(10): a.append(x * x) リスト内包なら簡潔! a = [x * x for x in xrange(10)] ※厳密にはいろいろ(ry
41.
「リスト内包」を使えば…… phi = [ lambda x: 1, lambda x: x, = ( = 0, ⋯ , − 1) lambda x: x ** 2, lambda x: x ** 3 ] こう書ける気がする phi = [lambda x: x ** m for m in xrange(M)] • かんたんになったね!
42.
だめでした…… • 0 2, 1 2 , 2 2 , 3 2 を表示してみる – “1 2 4 8” と出力されることを期待 M = 4 phi = [lambda x: x ** m for m in xrange(M)] print phi[0](2), phi[1](2), phi[2](2), phi[3](2) • ところがこれの実行結果は “8 8 8 8” – って、全部同じ!? なんで???
43.
うまくいかない理由は…… • 「レキシカルスコープ」がどうとか – ちょっとややこしい • 回避する裏技もあるけど…… – もっとややこしい M = 4 phi = [lambda x, c=m: x ** c for m in xrange(M)] print phi[0](2), phi[1](2), phi[2](2), phi[3](2) # => “1 2 4 8” と表示される(ドヤ