Python'da Performans Optimizasyonu: Kod Hızını Artırmanın Pratik Yolları
Python uygulamalarında performans sorunu genellikle yanlış veri yapısı seçimi ya da gereksiz döngülerden kaynaklanır. Hızı artırmak için önce darboğazı bulman gerekir.
Profiling ile başla. `cProfile` modülü hangi fonksiyonların en çok zaman aldığını gösterir. Böylece kör kuyuya taş atmazsin.
1import cProfile2import pstats34def ornek_fonksiyon():5return sum([i**2 for i in range(1000000)])67cProfile.run('ornek_fonksiyon()')List comprehension sıradan for döngüsünden 2-3 kat daha hızlıdır. Eğer `for i in range(n): liste.append(i)` yazıyorsan, bunu `[i for i in range(n)]` şeklinde değiştir.
Sık kullanılan fonksiyonların sonuçlarını önbelleğe al. `functools.lru_cache` dekoratörü aynı girdiler için tekrar hesaplama yapmaz.
1from functools import lru_cache23@lru_cache(maxsize=128)4def fibonacci(n):5if n < 2:6return n7return fibonacci(n-1) + fibonacci(n-2)89print(fibonacci(35)) # İlk çağrı yavaş, sonrakiler anlıkVeri yapısı seçimi çok önemli. Büyük listede sık sık arama yapıyorsan set ya da dictionary kullan; list.count() yerine `in` operatörü kullan.
NumPy dizilerini düz Python listelerinin yerine tercih et. Sayısal işlemlerde 10-100 kat daha hızlıdır.
Kütüphane seçiminde de dikkatli ol. Ağır işlemler için C dilinde yazılmış kütüphaneler (NumPy, Pandas, Cython) kullan.
Son olarak, erken optimizasyon tuzağına düşme. Önce çalışan kod yaz, sonra profil al, darboğazı bul, o kısmı optimize et. Çoğu zaman 20% kodun 80% performans farkını yaratır.
0 yorum