filter etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
filter 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]

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