ども、お騒がせしました、機械です。
>> そもそも機械式/電子式計算機は、階乗計算をこなす
>> ために生まれました。
>
>そ、そうだったのか…
ごめんなさい。冗談です。
で、今回の記事は、全体的に冗談なので、そのつもり
で・・・
※全くもって実用的じゃないし・・・
>ところで階乗を簡単に計算するには
>reduce(lambda x,y:x*y, range(1,101), 1)
>というのが一般的ではないでしょうか?
そうですね・・・確か教科書系の本にも、reduceを使
う方法が出てたはずです。
で、なぜ書かなかったかというと・・・私が無意識的
に外しました(をい・・・)
組み込み関数を使うのは(rangeでも躊躇してますが)、
なんか「文法が不十分」というような敗北宣言につなが
るような気がして、私自身、非常時以外使いません。
※ちなみに、私が実際によく使う手は、whileループだっ
たりします・・・頭が基本的にBASICからあまり進歩し
ていないみたいなんで・・・
というか、reduceの使い方自体が、かなり長い間、私
には理解できなかったです・・・いや、覚えてみればご
く単純なコトなんですが、覚えたら覚えたで、「なんでfor
文使うところを、こんな関数があるんだ?」って感じで。
現在では、reduceも結構重宝することが実感できるよ
うになりましたが、なんか頭の中で拒否してるみたいで
すね。
※どうせ関数で書くなら再帰だ!とか・・・
>あるいは lambda .. を operator.mul に置き換えたものとか。
Fe2+さんはoperatorモジュールがお好きなようですが、
多分一般的では無いと思われます☆
lambdaはともかく、operatorモジュールを使うのは、
余程厳密に定義が必要な時(mulの名前が他で使われて変
形されない保証)か、あるいは演算子定義をつかったマ
クロっぽい書き方をするかなり高度な使い方など、かな
り特殊な場面のみと思われます。
パンピーなローレベルスクリプタには、猫に小判かと。
まぁ今回は、実は最後に書いた「内包表記をないがし
ろにした使い方」とゆーのが妙に気に入ったので、身近
な「お勉強題材」の階乗計算にかこつけて書いたとゆー
与太話的なものなので、軽く流していただければ幸いで
す。
こういうつまらんことに労力使ってるから、あたしゃ
プログラミングの腕、上がらないんだろーなぁ・・・
/機械伯爵/