lambda etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
lambda etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

21 Ağustos 2008 Perşembe

Filter

Ben bu gece yazı yazmaktan kusmaz isem filter kullanımını öğreneceğiz hep birlikte...
filter bir listede ayıklama yapmaya yarar. Elinizdeki listeden belli kurallara uymayan elemanları çıkarmak istediğinizde uzun uzun döngüler kurmak yerine filter fonksiyonunu kullanabilirsiniz.
Kullanımı:
filter (fonksiyon , liste)
Şeklindedir listedeki her eleman fonksiyona tek tek parametre olarak gönderilir, eğer fonksiyon true olarak dönüyorsa listedeki eleman silinmez false olarak dönüyorsa silinir. Hemen güzel bir örnek ile pekiştirelim.
Önce tek parametreye sahip, verilen parametrenin 2 ye bölümünden kalan 0 dan büyükse (yani verilen sayı tek sayı ise) True döndüren bir fonksiyon belirleyelim.
def is_odd(number):
return number % 2 > 0

Şimdi elimizdeki bir sayı listesine bu fonksiyonu
def is_odd(number):
return number % 2 > 0
numbers = range(10) # 10'a kadar olan sayıları içeren bir liste
odds = filter(is_odd,numbers)
print odds
[1,3,5,7,9]

Biraz daha neşelendirip bu fonksiyonu lambda ile tanımlarsak.. Program tek satıra iniyor.

odds = filter(lambda number : number % 2 > 0, range(10))
print odds
[1,3,5,7,9]

Lambda

Lambda fonksiyonları , karmaşık olmayan fonksiyonları hemen tek satırda ifade etmemizi sağlar. Nasılmı?

def is_odd(number):
return number % 2 > 0 # sayının 2 ye bölümünden kalan 0 dan büyüktür önermesini döndür.


yerine

is_odd = lambda number : number % 2 > 0 # döndürülecek değer de : işaretinden sonra yazılıyor.
^ parametreler
burada
sıralanıyor.


Şeklinde yazabiliriz. Lambda fonksiyonları tanımlarken virgül koyarak birden fazla parametre belirleyebiliriz

Örneğin aşağıdaki fonksiyon 2 kenar açısını parametre olarak alıp üçgenin 3. açısını döndürüyor.

find_angle = lambda a, b : 180 - (a + b)
print find_angle(30,60)
90


Abartıp lambda fonksiyonları tanımlarken argüman tipi parametreler oluşturabiliriz.

find_angle = lambda a = 10 ,b = 20 : 180 -(a , b)
print find_angle(a=50) # b yi belirtmediğimiz için default değeri 20 kabul edilecek
110


özetle şunu kafanıza kazıyın : lambda parametreler : döndürülecek sonuç

15 Ağustos 2008 Cuma

Kurtar Beni Lambda

Bazen öyle şeylere ihtiyaç duyuyorum ki, "Bunun için de şimdi bilmem kaç satır döngü oluşturmaya değer mi?" diye düşünmeden olmuyor. Mesela XfceP'i yaparken de öyle bir olayla karşılaşmıştım.

Sizi bilmem ama, böylesi basit bir şey için döngü oluşturmayı da fazlasıyla lüks buldum, o nedenle de lambda bazı yerlerde gerçekten işe yarayan bir araç. Özellikle, for döngüsü içinde birkaç tane daha döngü kurunca, bir tiksinti kaplıyor içimi, şu linkte[1] anlatıldığı gibi:

nums = range(2, 50)
for x in nums:
divided = False
for i in range(2, x - 1):
if (x % i) == 0:
divided = True
if divided == False:
print x,

Halbuki lambda bu karışıklıktan tek bir satırda kurtulmanıza izin veriyor:

>>> nums = range(2, 50)
>>> for i in range(2, 8):
... nums = filter(lambda x: x == i or x % i, nums)
...
>>> print nums
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

Lambda'nın, map & filter & reduce hedelerine ise daha sonra değinirim artık..

[1]: http://www.secnetix.de/olli/Python/lambda_functions.hawk