作者: 機械伯爵
日時: 2007/9/19(13:37)
 不勉強暴露(爆)

> 正式にはなんと呼ぶのか…
>  A if C else B
> という式です。
> 2.5 から使えますよね。

 あああ、リストやジェネレータの内包表現以外にも、
アレ、使えるのかぁ(あふぅ)

※マニュアルを引いたら、Conditional Expressions(条件付実行式?)と
 言うらしいです

 とゆーわけで、ジェネレータにも対応するために、
タプルで囲ってこんなん(rangeで作ったらエラーが出たので)

def reduce(fnc, lst):
  return (fnc(reduce(fnc, tuple(lst)[:-1]), lst[-1])
   if len(lst) > 2
   else fnc(lst[0], lst[1])
  )

 まぁ、一行で書かないなら、こっちのほうがいいかも。

def reduce(fnc, lst):
  lst = tuple(lst)
  return (fnc(reduce(fnc, lst[:-1]), lst[-1])
   if len(lst) > 2
   else fnc(lst[0], lst[1])
  )

 ま、どっちにせよ、千回ほどまわしたらスタックオーバー
するので、Pythonで再帰はあんまり意味無いかも。

 /機械伯爵/