lambda

lambda, ilk bakışta kolayca anlaşılabilecek ama üzerine düşülmediğinde kolayca unutulabilecek bir fonksiyondur. Evet, kendisi bir fonksiyondur ve fonksiyon tanımlarken kullandığımız def anahtar kelimesinin bir alternatifidir.

lambda fonksiyonu, tek seferlik fonksiyonlar için geçerlidir. Örneğin siz, bütün kod sayfasında tek bir defaya mahsus bir toplama işlemi yapmak isterseniz bunu aşağıdaki gibi bir fonksiyon tanımlayarak yapmanız pek mantıklı olmaz:

def topla(x, y):

      pass

İşte, böyle durumlarda lambda kullanmayı tercih ediyoruz. Şimdi, ilk önce bir karşılaştırma yapalım.

Yukarıda gördüğünüz şey, daha önceden hatırlayacağınız üzere klasik bir fonksiyon. Bu fonksiyon iki sayıyı toplayıp döndüren bir fonksiyondur. Bunun aynısını lambda ile şu şekilde yazabiliriz:

Gördüğünüz gibi aynı çıktıyı alabildik. Şimdi, lambda yapısına bir bakalım.

Kutuların renk uyumuna dikkat edelim. Normalde def anahtar kelimesini verdikten sonra parametre olarak x ve y argümanlarını veriyoruz. Aynı şeyin lambda için yapılışı da lambda x, y şeklindedir.

Sonrasında def ile tanımladığımız fonksiyonda mor ok ile gösterdiğim ':' işareti, lambda x, y : şeklinde karşımıza çıkıyor.

Dolayısıyla lamda x, y : ifadesi def topla(x, y): ifadesine eşittir. Bu kısım, fonksiyonun tanımlandığı kısımdır.

':' işaretinden sonraki kısım ise, sonuç kısmıdır. Yani döndürülecek işlemin girildiği kısımdır.

Şimdi, bu anlatımı biraz daha sadeleştirerek göstermek istiyorum.

Ufak bir pratik daha yapalım ve iki yöntemi de kullanarak bir sayının karesini almaya çalışalım.

Buradaki lambda fonksiyonunda 'lambda x' ifadesindeki 'x' argümanına 'toplama(5)' diyerek '5' değerini verdik. İki nokta üst üste işaretinin sağında kalan kısımda ise bu argümanla yaptığımız işi görüyorsunuz.

Şimdi, birkaç lambda işlemi yapalım; biraz daha otursun.

Gördüğünüz gibi bir adet x argümanı verdim ve bunun küpünü almasını istedim. Sonrasında print(kup_Al(3)) şeklinde; normal bir fonksiyonu çağırıp değer verirken yaptığımız gibi 3 değerini verdim. Hesaplama başarılı geldi.

Bu fonksiyonu bir değişkene atamak zorunda değilsiniz.

Bunun bu şekilde bir kullanımı da vardır ve bu daha yaygındır. Bu noktada dikkat edeceğiniz en önemli şey parantezlerdir. Aşağıdaki, bizim normal lambda fonksiyonumuz:

print((lambda x : x ** 3))

Burada, print() dedikten sonra parantezler arasına bir parantez daha açıp lambda fonksiyonunu girmemiz lazım. Değeri ise, lambda fonksiyonuna ait olan parantezin dışına, print() içerisinde kalarak girmemiz lazım:

print((lambda x : x ** 3) (2))

Burada, (2) değeri x yerine koyulur ve işlemler gerçekleştirilir.

lambda fonksiyonunda '*args' ifadesi vardır. Aslında bu, normal fonksiyonlarda da vardır ama lambda fonksiyonunda bunun kullanımı daha yaygındır. *args dediğiniz zaman sınırsız sayıda argüman (girdi) verebilirsiniz. Hemen bakalım.

Buradaki ana lambda fonksiyonu şu şekildedir: (lambda *args : sum(args)). Bu yapıda söylemek istediğimiz şey; sınırsız şekilde argüman al ve aldıklarının hepsini topla.

Oradaki sum fonksiyonu toplama işini yapan fonksiyondur. Dikkat ederseniz bir sürü değer verdik ve hepsini başarıyla topladı.

İsterseniz başka işlemleri de gerçekleştirebilirsiniz. Örneğin;

İsterseniz verilen bütün argümanları yazdırabilir ya da onları yok edebilirsiniz; işlem kısmı tamamen size kalmış.

Ufak bir uygulama yapalım.

İlk önce içerisinde 3 tane Tuple barındıran bir liste (myList) tanımladım. Sonrasında sıralama işlemi için bir ifade girdim:

myList.sort(key=lambda x : x[1])

Peki, aslında burada ne oldu? Liste içerisindeki her bir Tuple, lambda fonksiyonunda tanımladığım x'e tekabül ediyor. Yani x değeri mylist değil; ('Cyber', 20) ve diğer Tuple'lardır. Sonrasında verdiğim x[1] ifadesi, bu Tuple'lar içerisindeki birinci index'i ifade ediyor. Yani baktığınız zaman aslında Tuple'lar içerisindeki sayılara göre bu listeyi küçükten büyüğe doğru sıralıyorum. Eğer bunu isimlere göre sıralamak isterseniz 'x[1]' ifadesi yerine 'x[0]' yazmanız yeterli olacaktır.

Oradaki key= ifadesi, sort fonksiyonunun bir özelliğidir; lambda ile alakası yoktur. Bu basit uygulamanın amacı; lambda fonksiyonunun başka fonksiyonlarla ne kadar uyumlu olduğunu görmeniz ve ne kadar esnek olduğunu anlamanız içindi.


Yayınlanma Tarihi: 2022-12-01 13:03:55

Son Düzenleme Tarihi: 2022-12-08 23:44:48