"Enter"a basıp içeriğe geçin

[Python] dict.get(‘key’) vs dict[‘key’] Performans Karşılaştırması

Bu yazıda Python dictionary veri yapısından istediğimiz herhangi bir veriye ulaşırken kullanabileceğimiz iki benzer yöntemi performans olarak karşılaştıracağım. Karşılaştırmaya geçmeden önce dictionaryler ile ilgili birkaç hatırlatma yapalım.

Dictionary sıralanmış, değiştirilebilir ve indekslenmiş bir veri yapısıdır. Süslü parantezler içine yazılır ve yapı olarak JSON’a çok benzemektedir.

Aşağıda örnek bir dictionary yapısı görebilirsiniz;

myDict = {
     'Name': 'Suleyman', 
     'Age': 99
}

Üstteki yapıdan Name ve Age verilerini çekmek için alttaki gibi iki farklı kod yazabiliriz.

name = myDict["Name"]

name = myDict.get("Name")

Bu iki kodun performansını inceleyelim.

import timeit

start = timeit.default_timer()

myDict = {
    "Name" : 1
}

for count in range(0,100000000):
    try:
        name = myDict["Name"]
    except:
        name = None

stop = timeit.default_timer()

print('Time: ', stop - start)         Time:  10.589664224
import timeit

start = timeit.default_timer()

myDict = {
    "Name" : 1
}

for count in range(0,100000000):
    name = myDict.get("Name", None)

stop = timeit.default_timer()

print('Time: ', stop - start)         Time:  16.906901641

Üstteki iki örnekte görüldüğü üzere ilk opsiyon her zaman daha hızlı çalışacaktır fakat ilk opsiyondaki try-except bloğu anlamsız görünmekte fakat şimdi bir de dictionary içinde bulunmayan bir veriyi almaya çalışalım.

import timeit

start = timeit.default_timer()

myDict = {
    "Name" : 1
}

for loop_count in range(0,100000000):
    try:
        age = myDict["Age"]
    except:
        age = None

stop = timeit.default_timer()

print('Time: ', stop - start)           # Time:  33.721611881
import timeit

start = timeit.default_timer()

myDict = {
    "Name" : 1
}

for loop_count in range(0,100000000):
    age = myDict.get("Age", None)

stop = timeit.default_timer()

print('Time: ', stop - start)           # Time:  17.490385638

Gördüğünüz üzere dictionary içinde olmayan bir veriyi almaya çalışırsanız bu sefer ikinci opsiyon neredeyse iki kat daha hızlı çalışmakta.

Sonuç

4 örneği de göz önüne alırsak şöyle bir sonuç çıkarabiliriz. Web servis veya dosyadan bir veri okuyup dictionary’e atadığınız zaman eğer istediğiniz key’in bütün nodelarda olduğundan eminseniz ilk opsiyon kesinlikle çok daha hızlı çalışacaktır fakat aradığınız bu key verinin çoğunda yok ve her zaman try-except bloğu çalışacaksa her zaman ikinci opsiyonu tercih etmek gerekmekte.

Özet olarak try-except bloğu ne kadar çok çalışırsa kodunuz o kadar yavaş çalışacaktır.

İlk Yorumu Siz Yapın

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    This site uses Akismet to reduce spam. Learn how your comment data is processed.