Soru geçmişi
map() fonksiyonu, Python'un en erken sürümlerinden beri işlevsel programlamanın bir yansıması olarak bulunmaktadır. Bir işlevin, yinelemeli bir nesnenin her bir elemanına uygulanması için kullanılır.
Problem
Taze geliştiricilerin map, jeneratörler ve liste ifadeleri arasındaki farkı anlamakta zorluk çektiği görülmektedir. Performans, okunabilirlik ve tembel veri işleme ile uyumluluk konusunda sorular ortaya çıkmaktadır.
Çözüm
map() fonksiyonu, bir işlev ve bir veya daha fazla yinelemeli nesne alır ve her bir elemana sırayla işlev uygulanırken tembel bir yineleyici döndürür. Bu, bellek açısından verimli olup büyük veri hacimlerini ara liste oluşturulmadan işleme olanağı tanır.
Kod örneği:
# map üzerinden sayıların karelerini döndürme numbers = [1, 2, 3, 4] squares = map(lambda x: x**2, numbers) print(list(squares)) # [1, 4, 9, 16]
Anahtar özellikler:
map() fonksiyonu iki veya daha fazla diziyi aynı anda çalıştırabilir mi? Bunu nasıl yapabilirsiniz?
Evet, işlevin aynı sayıda argümanı olduğunda birden fazla dizi geçirebilirsiniz. En kısa yinelemeli nesne bittiğinde yineleme sona erecektir.
Kod örneği:
a = [1, 2, 3] b = [4, 5, 6] res = list(map(lambda x, y: x + y, a, b)) print(res) # [5, 7, 9]
Bir işlev, None döndürdüğünde map() ne döndürür?
map'in her bir elemanı None olacaktır. İşlev açıkça bir değer döndürmüyorsa, sonuç her zaman None listesidir:
def print_val(x): print(x) # return yok list(map(print_val, [1,2,3])) # [None, None, None] ve konsolda üç çıktı
map() ve liste ifadesi arasındaki bellek tüketimi açısından fark nedir?
map, tüm sonucu hemen bellekte oluşturmaz, talep üzerine hesaplar; liste ifadesi [...] ise tam bir liste oluşturur. Büyük veri hacimlerinde map kullanımı daha uygundur, tüm sonucun hemen gerekli olmadığı durumda.
Projede, dosyaya yazan bir işlevle bir listeyi döngüye sokmak için map kullanıldı, değer döndürmeyi unuttuk. Veri bekleniyordu, ancak map None ile bir yineleyici döndürdü.
Artıları:
Eksileri:
Büyük günlük listesini işlemek ve süzmek için map kullanıldı, sonuç döndüren saf bir işlev yazıldı. Map'in yineleyicisi, belleği aşmadan dosyaya yazılması için değerleri sırayla sağladı.
Artıları:
Eksileri: