投稿日
2010/12/29 水曜日
なんとなく関数よりクラス使った方がかっこいいよねということで、
random.randint(0, 10)
とかって書けばいいところを
r = random.Random()
r.randint(0, 10)
とかって書いちゃう場合ってあると思いますけど、上の書き方と下の書き方は等価ではないです。
とりあえずランダムな値が得られればいいやってな文脈では結果は同じと言えるんですが、クラスをインスタンス化する場合__init__の中でseedが呼ばれます。
でこのseedは、処理自体(引数ありでseedを呼んだ場合)が重いうえに、seedの元になる値を選ぶ処理(引数なしでseedを呼んだ場合)が加わるとさらに重いです。
プロファイラで調べたところ、うちの環境では、関数だけの場合と、引数なしインスタンス化+メソッドの場合では後者の方が5倍くらい遅いです。
引数有りインスタンス化+メソッドの場合でも2.5倍くらい遅いです。
ちなみに、インスタンス化を含まずメソッド呼び出しだけを比較すると、関数呼び出しとほぼ同じくらいの速度でした。(Randomクラスが関数バージョンより特に遅いわけではない。要は使い方の問題。)
なので、インスタンスを引数で引き回したり、グローバル変数にすれば関数バージョンと同じ速度で動きます。が、特に理由なくそうするくらいなら素直に関数バージョンを使った方がいいと思います。
import randomでseedは自動的に呼ばれますし。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…