8

これが私がやったことです。関数に1つ、Pythonファイル自体に1つの2つのプロシージャを作成しました。Pythonファイル自体のものは、まったく同じであっても、ほぼ2倍遅くなります。なぜ ?

以下は、P 要素の単なるループである 2 つの手順の例です。

次のpythonファイルがあります:

from time import *
P=1000000 #range of the 2 loops

def loop(N):
        for k in range(N):
                continue

start=time()
loop(P)
stop1=time()
for k in range(P):
            continue
stop2=time()
print "time with function ",stop1-start
print "time without function ",stop2-stop1

これが私が得たものです(1000個のサンプルで試してみましたが、結果は次のとおりです):

time with function  0.0950000286102
time without function  0.15700006485

range の代わりに xrange を使用すると、次のようになります。

time with function  0.0460000038147
time without function  0.107999843597

つまり、リストを作成するのに 0.05 秒かかります

役に立たない質問かもしれませんが、誰かがなぜこれほど速く進んでいるのか知っていれば、喜んで教えてください

4

1 に答える 1

14

唯一の大きな違いは、関数内のバージョンはその関数のローカル変数のみを更新するのに対し、関数内にないバージョンはグローバル変数を更新することですk

ここで述べたように:

for ループの非マップ バージョンで利用できる最後の高速化は、可能な限りローカル変数を使用することです。上記のループを関数としてキャストすると、append と upper がローカル変数になります。Python は、グローバル変数よりもはるかに効率的にローカル変数にアクセスします。

于 2011-08-11T15:42:41.067 に答える