ProgramlamaPython Backend Geliştirici

Python'da map() fonksiyonu ile çalışmanın anahtar özelliklerini açıklayın. Nasıl kullanılır, bu yaklaşımın sınırlamaları nelerdir ve map, jeneratörlerden ve liste ifadelerinden neyle farklıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Hemen bir liste oluşturmadan tembel bir yineleyici döndürür;
  • Birden fazla argümanı olan işlev için birden fazla yinelemeli nesne alır;
  • Genellikle, akış işlemeleri veya büyük verilerle uyumluluk gereksinimi olduğunda liste ifadelerine tercih edilir.

Kandırmaca soruları.

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.

Tipik hatalar ve anti-paterni

  • Değer döndürmeyen bir yan etki gerektiren yerlerde map kullanımı.
  • Python 3'teki map'in tembel bir yineleyici olduğu gerçeğini unutmak: listeye dönüştürülmezse yineleme olmayacaktır.
  • Uzunlukları uyumsuz diziler geçişi: sonuç en kısa olanla olacaktır.

Hayattan bir örnek

Olumsuz durum

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ı:

  • Kodun kısalığı.

Eksileri:

  • İşlev değer döndürmediğinde sonuç yok.
  • Yan etkiler, yürütme sırası garantisi vermez.

Olumlu durum

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ı:

  • Bellek açısından verim.
  • Akış işleme kolaylığı.

Eksileri:

  • Sonucun bir yineleyici olduğunu hatırlamak gerekir, sadece bir kez kullanılabilir.