上の図前半は前のものです。この程度であれば、Nottori(lambda式)にする必要性がわからないですが…。
最新の画像[もっと見る]
- 何でそうなるの? 3日前
- やっぱり、ドジャースでしたか? 1週間前
- やっぱり、ドジャースでしたか? 1週間前
- やっぱり、ドジャースでしたか? 1週間前
- ドジャースは希望通り?負けました! 1週間前
- ドジャース三連勝!!! 2週間前
- 思わず、歓声出てしまいました!フリーマン選手のサヨナラ逆転満塁ホームラン!! 2週間前
- いよいよ明日からワールドチャンピオンシリーズ始まります! 2週間前
- いよいよ明日からワールドチャンピオンシリーズ始まります! 2週間前
- いよいよ明日からワールドチャンピオンシリーズ始まります! 2週間前
「Python」カテゴリの最新記事
- 自分がモタモタしているうちに、cametanさんが完璧に説明してくれました!
- cametanさんが説明していることとは、少し違うかもしれません?REPLとは何じゃあ!
- コップ本の例題にRationalクラス(分数クラス)あったので、やってみました。5回目...
- コップ本の例題から、Rationalクラス(分数クラス)その4回目。
- コップ本の例題から、Rationalクラス、その3回目かな?
- コップ本の例題から、分数クラス(Rational)をやってみる。その2。by python3
- コップ本の例題から、分数クラスを試してみる。by python3
- 暫く放おって置きました。python reduce lambdaと少し前の写真。
- 混乱してました!pythonでの+、リスト内の+とリスト同士の+
- チョット理解できないreduce,lambda,でも手掛かりは有ったかも?
クジラ飛行机さんの「Pythonの教科書」では、mapとfilterの説明に移っていきますが、全編で言えると思いますが、例が単純でそれがなにか役に立つの?と思えるのは、読み方が浅いのでしょうかね。
そうですね(笑)。
実際、Cとかに詳しい人程、ラムダ式が良く分からなくなる傾向があるんですよ(笑)。
そもそも、Cだと、前にも書きましたが、ローカル関数さえ扱えないので、実はCに慣れれば慣れるほどラムダ式の存在が不可思議になるようです。
Pythonで一番簡単な例は「自作sum関数を作るにはどうする?」って辺りでしょうか。
sumは
>>> sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
55
>>>
ですが。
一から作るんじゃなくって、組み込みの高階関数とラムダ式を使えばどうなるか、と言うお題があったとして。
もっともスマートなのはfunctoolsに含まれるreduceを用いる事です。
>>> import functools
>>> functools.reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 0)
55
>>>
reduceってのは関数型言語では有名な「畳込み関数」と言われる高階関数です。
これ、ちょっと初見は動作が分かりづらいんですが、
reduce(関数, イテラブル, 初期値)
と言う記述で、第一引数の関数に「ラムダ式を使って良い」と言う事ですね。
その関数は2引数が基本で、イテラブルの先頭と初期値にその関数を適用して初期値に代入、次にイテラブルの二番目の値と初期値に関数を適用・・・とイテラブルの末尾まで計算を続けていきます。
このreduceを利用すると、階乗の計算、なんかもすぐ書けます。
>>> def factorial(lst):
return functools.reduce(lambda x, y: x * y, lst)
>>> factorial([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
3628800
>>>
for文を使って書くよりもシンプルに書けますね。
他にもPythonの組み込み高階関数にはmapとかfilter等があります。両者ともラムダ式と相性が良い。
また、関数型言語の練習にはこれらmapとかfilterを「自作する」と言う問題がしばしばあります。
なお、mapやfilter的な効果をもっと統一的に扱う目的で導入されたのがしばしば言ってる「リスト内包表記」です。