Python.use(better) #factorial: step03 -- reduce

記事一覧

Python.use(better)
factorial: step03 -- reduce

《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python factorial.py
>>> do()
0: step00 -- while n>1:
1: step01 -- for e in range(n,1,-1):
2: step02 -- if not n>1:
3: step03 -- reduce
>>>
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do に実引数を指定します。

>>> do(3)
>>> # -------------------------------------------------- step03
>>> fact(0)
1
>>> fact(1)
1
>>> fact(2)
2
>>> fact(3)
6
>>> fact(4)
24
>>> fact(5)
120
>>>
  • 0 から 5 までの階乗が得られます。

事例:コードの解説

    def fact(n):
        return reduce(lambda acc,e: acc*e, range(n,1,-1), 1)     #1:
■ #1: reduce
        return reduce(lambda acc,e: acc*e, range(n,1,-1), 1)     #1:

reduce を利用すると、簡潔で見通しの良いコードを記述できます。

  • 第3引数:初期値 1 を使って、
  • 第2引数:シーケンス range(n,1,-1) の各要素 e を順に参照しながら、
  • 第1引数:lambda 式を実行します。

《Tips》step01: for 文と違って、変数 acc の値を更新する方法(how)を関数 reduce 内に封じ込めるので、情報隠蔽の原則に沿ったコードを記述できます。

《Tips》step02: 再帰呼び出しと違って、if に続く脱出条件を判定する方法(how)を関数 reduce 内に封じ込めるので、情報隠蔽の原則に沿ったコードを記述できます。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/10/22