7

reモジュールからfindall()を使用するだけでよいとしましょう。これを行う方が効率的ですか?

from re import findall

また

import re

実際に速度/メモリ使用量などに違いはありますか?

4

3 に答える 3

14

インポートに違いはありませんが、アクセスにわずかな違いがあります。

あなたがとして機能にアクセスするとき

re.findall() 

Pythonは、最初にグローバルスコープでモジュールを検索し、次にモジュールdictでfindallを検索する必要があります。ループ内で何千回も呼び出している場合は、違いが生じる可能性があります。

于 2008-12-06T20:45:37.740 に答える
12

疑わしい場合は、時間を計ってください。

from timeit import Timer

print Timer("""re.findall(r"\d+", "fg12f 1414 21af 144")""", "import re").timeit()
print Timer("""findall(r"\d+", "fg12f 1414 21af 144")""", "from re import findall").timeit()

10,000,000 回の呼び出しを 5 回以上繰り返すと、次の結果が得られます。

re.findall(): 123.444600105
findall(): 122.056155205

findall()を使用するよりも、直接使用する方がわずかながら使用上の利点があるようですre.findall()

ただし、実際の import ステートメントの速度は大幅に異なります。私のコンピューターでは、次の結果が得られます。

>>> Timer("import re").timeit()
2.39156508446
>>> Timer("from re import findall").timeit()
4.41387701035

そのimport reため、実行速度が約 2 倍になるようです。ただし、実際のインポートではなく、インポートされたコードの実行がボトルネックになっていると思われます。

于 2008-12-06T23:20:18.913 に答える
3

インポート後にローカル名前空間にreの名前が表示されることを除いて、違いはありません。

于 2008-12-06T20:35:50.647 に答える