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