ども、機械す。
> | 使い捨て関数を定義するのに、evalに文字列渡して評価させるなんて、
> |ぞっとしないです。
>
> evalに文字列なんてことはしなくても、名前を付けてスコープロー
> カル関数を使えばよいんじゃないでしょうか。文も書けるし。
はい、そのとーりです。
GvRも基本的には、その方法を薦める方向でlambdaを廃止したかった
わけなんですが………
Pythonユーザがこんなこと言っちゃダメなんだろうけど………面倒
臭いんですよ、いちいち名前つけるの(泣)
参照して何度も使う関数は、もちろん名前つけますが、その部分だけ
の繰り返しのためだけの式にいちいち名前つけるの、疲れます。
例えば、こーいうの。
def fncA(x, y):
return x + y
def fncB(x, y):
return x - y
def fncC(x, y):
return x * y
def fncD(x, y):
return x / y
fncList = [fncA, fncB, fncC, fncD]
del fncA, fncB, fncC, fncD
※実行
fncList[0](5, 10) ⇒ 15
最終的に、リストに纏める関数を定義するのに、あとで消去する
名前をいちいち付けるのは辛いです。
で、関数名を使わずにevalを使うとこんな感じでしょうか
fncStr = [
'x + y',
'x - y',
'x * y',
'x / y']
※実行
eval(fncStr[0],{'x': 5, 'y': 10}) ⇒ 15
実行時に結構面倒なコード書かなければならないし、それに内部の
引数に使った引数文字を知っている必要があります。
んでもって、lambdaを使うならこれで一発。
fncList = [
(lambda x, y: x + y),
(lambda x, y: x - y),
(lambda x, y: x * y),
(lambda x, y: x / y)]
※実行
fncList[0](5, 10) ⇒ 15
コードも見やすいし、無駄な名前もでてきません(スッキリ)
折角関数がファーストクラスオブジェクトなので、こういう有効利用
するには、やっぱラムダがあってくれるのが大助かりとゆーことなのです。
/機械伯爵/