Lambda ifadelerinden bahsediyoruz:
lambda x: x**2 + 2*x - 5
Lambda ifadeleri aslında oldukça faydalı. Python, işlevsel programlama adı verilen bir programlama stilini destekler. Bu şekilde fonksiyonları fonksiyonlara parametre olarak verebiliriz. Örnek:
mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])
Yukarıdaki kod mult3
değişkenini [3, 6, 9]
olarak ayarlar. Bu liste orijinal listedeki 3’ün katları olan öğeleri aldı. Bu yöntem aşağıdakine göre daha kısadır (ve daha nettir)
def filterfunc(x):
return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])
Tabii ki, bu özel durumda, bir liste üreteci kullanarak da aynı şeyi yapabilirsiniz:
mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]
(veya range(3,10,3)
kullanılabilir).
lambda
aslında fonksiyon demenin süslü bir yolu. lambda adı dışında, belirsiz, korkutucu veya şifreli bir yapısı bulunmuyor. Aşağıdaki satırı okuduğunuzda, lambda
kelimesini aklınızda function
ile değiştirin:
>>> f = lambda x: x + 1
>>> f(3)
4
Böylece sadece bir x işlevi tanımladık. R
gibi bazı dillerde bunu aşağıdaki gibi yaparız:
> f = function(x) { x + 1 }
> f(3)
4
Yani programlamada yapılacak en doğal şeylerden biri aslında.
Yukarıdaki örneğe geri dönelim. Lambda’lar liste üreteçleri haricinde de yararlı olacaktır. Bir liste üreteci kullanamadığınız durumlarda lambda işlevleri bir şey yazmanın en kısa yolu olabilir. Aşağıda daha karmaşık kullanım örneklerine bakalım:
Başka bir işlevden işlev döndürme
>>> def transform(n):
... return lambda x: x + n
...
>>> f = transform(3)
>>> f(4)
7
Bu genellikle Python’un dekoratörleri gibi işlev sarmalayıcıları oluşturmak için kullanılır.
Bir yinelemenin öğelerini reduce()
ile birleştirme:
>>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
'1, 2, 3, 4, 5, 6, 7, 8, 9
Alternatif anahtara göre sıralama
>>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
[5, 4, 6, 3, 7, 2, 8, 1, 9]