pythonパフォーマンスキラー-非効率なパフォーマンス構造
4462 ワード
「pythonで正しいデータを見つけることは非常に重要です.正しい選択は時間を節約するだけでなく、コードのメンテナンス量を減らすことができるからです」——『pythonの達人の道』
pythonを理解し、正しいデータ構造を使用し、できるだけ標準ライブラリを再利用します.
pythonコードのパフォーマンスを分析するにはどうすればいいですか?
①timeitモジュール
②cProfileモジュール
コマンドライン環境
python -m cProfile myscript.py各関数の呼び出し回数と経過時間を表示
python -s time cProfile myscript.py-sは他のフィールドでソートし、
次にいくつかの例を見ます.
例として、test 2にかかる時間はtest 1の数百倍である.
例2辞書
見つからないキーに戻り値を与えるにはdictのgetメソッドを使用します.デフォルト値を指定する場合はsetdefaultを使用します.さらにcollectionsモジュールにはdeafultdictメソッドもあります.
pythonを理解し、正しいデータ構造を使用し、できるだけ標準ライブラリを再利用します.
pythonコードのパフォーマンスを分析するにはどうすればいいですか?
①timeitモジュール
import timeit
timeit.timeit("x=sum(range(10))")
②cProfileモジュール
コマンドライン環境
python -m cProfile myscript.py各関数の呼び出し回数と経過時間を表示
python -s time cProfile myscript.py-sは他のフィールドでソートし、
import cProfile
cProfile.run(“sum( x**2 for x in range(100)”)
次にいくつかの例を見ます.
例として、test 2にかかる時間はtest 1の数百倍である.
import cProfile
count=10**5
def test1():
"""append , reversed """
nums=[]
for i in range(count):
nums.append(i)
nums.reverse()
def test2():
""" """
nums2=[]
for i in range(count):
nums2.insert(0,i)
#
cProfile.run('test1()')
cProfile.run('test2()')
例2辞書
見つからないキーに戻り値を与えるにはdictのgetメソッドを使用します.デフォルト値を指定する場合はsetdefaultを使用します.さらにcollectionsモジュールにはdeafultdictメソッドもあります.
def add_animal_in_family(species,animal,family):
# family , , ; animal
if family not in species:
species[family]=set()
species[family].add(animal)
species={}
add_animal_in_family(species,"tomcat","cat")
print(species)
import collections
def add_animal_in_family(species,animal,family):
species[family].add(animal)
# ,deafultfict
# keyerror。
species=collections.defaultdict(set)
add_animal_in_family(species,'cat','felidea')