もっと複雑な問題に取り組もうとしているうちに、ローカル変数とメンバー変数のアクセス速度を比較しました。ここでは、テストプログラム ローカル変数アクセスがPythonのクラスメンバーアクセスよりも速いのはなぜですか?
:#!/usr/bin/env python
MAX=40000000
class StressTestMember(object):
def __init__(self):
self.m = 0
def do_work(self):
self.m += 1
self.m *= 2
class StressTestLocal(object):
def __init__(self):
pass
def do_work(self):
m = 0
m += 1
m *= 2
# LOCAL access test
for i in range(MAX):
StressTestLocal().do_work()
# MEMBER access test
for i in range(MAX):
StressTestMember().do_work()
は、私はそれが各イテレーションのStressTestMember
とStressTestLocal
をインスタンス化するためには悪いアイデアのように見えるかもしれません知っているが、これらは基本的にアクティブなレコードですモデル化されたプログラムでは意味があります。 0m22.836
- LOCALアクセステストの後
のさらに一部ながら
0m32.648sローカルバージョンは〜33%高速でありますクラス。どうして?
+1非常に良い、明確な答え。 – Tadeck
非常にいいです。これは受け入れに値する。 –
ローカルスコープのクラス変数への新しい参照を作成することは賢明でしょうか?例えば、 'm = self.m'?このテストでは何の違いもありませんが、私の 'do_work()'は何百万回も走るループです。 –