Python ÖRNEKLERLE Lambda Fonksiyonları
⚡ Akıllı Özet
Lambda fonksiyonları Python `def` yerine `lambda` anahtar kelimesiyle tanımlanan küçük, anonim fonksiyonlardır. Tek bir ifade içerirler, herhangi bir sayıda argüman alabilirler ve genellikle `map()`, `filter()` ve `sorted()` gibi yerleşik fonksiyonlara doğrudan iletilirler.

Lambda Fonksiyonu Nedir? Python?
A Lambda Fonksiyonu Python programlama anonim bir işlev veya adı olmayan bir işlevdir. Birden fazla satırı olmayan küçük ve kısıtlı bir fonksiyondur. Tıpkı normal bir fonksiyon gibi, Lambda fonksiyonu da tek bir ifadeyle birden fazla argümana sahip olabilir.
In Pythonanonim işlevler oluşturmak için lambda ifadeleri (veya lambda formları) kullanılır. Bunu yapmak için şunları kullanacaksınız: lambda anahtar kelime (tıpkı kullandığınız gibi) def Normal fonksiyonları tanımlamak için). Tanımladığınız her anonim işlev Python 3 temel parçaya sahip olacak:
- Lambda anahtar sözcüğü.
- Parametreler (veya bağlı değişkenler) ve
- İşlev gövdesi.
Bir lambda işlevi herhangi bir sayıda parametreye sahip olabilir, ancak işlev gövdesi yalnızca şunları içerebilir: bir ifade. Üstelik lambda tek satırlık bir kodla yazılır ve hemen çağrılabilir. Gelecek örneklerde tüm bunları çalışırken göreceksiniz.
Söz Dizimi ve Örnekler
Lambda fonksiyonunu yazmanın resmi sözdizimi aşağıda verilmiştir:
lambda p1, p2: expression
Burada p1 ve p2 lambda fonksiyonuna iletilen parametrelerdir. İhtiyacınız kadar çok veya az parametre ekleyebilirsiniz.
Ancak, normal fonksiyonlarda olduğu gibi parametrelerin etrafına parantez koymadığımıza dikkat edin. Son kısım (ifade) herhangi bir geçerli ifade olabilir. Python Fonksiyona verdiğiniz parametreler üzerinde işlem yapan ifade.
Örnek 1
Artık lambdaları bildiğinize göre bir örnekle deneyelim. Öyleyse aç IDLE ve aşağıdakileri yazın:
adder = lambda x, y: x + y print (adder (1, 2))
Code açıklama
Burada lambda fonksiyonunun döndürdüğü sonucu tutacak bir değişken tanımlıyoruz.
1. Anonim bir işlevi tanımlamak için kullanılan lambda anahtar sözcüğü.
2. x ve y lambda fonksiyonuna ilettiğimiz parametrelerdir.
3. Bu, ilettiğimiz 2 parametreyi toplayan fonksiyonun gövdesidir. Bunun tek bir ifade olduğuna dikkat edin. Bir lambda fonksiyonunun gövdesine birden fazla ifade yazamazsınız.
4. Fonksiyonu çağırıyoruz ve döndürülen değeri yazdırıyoruz.
Örnek 2
Bu, lambda'nın temellerini ve sözdizimini anlamak için basit bir örnekti. Şimdi bir lambda'yı yazdırıp sonucu görelim. Tekrar, pencerenizi açın. IDLE ve aşağıdakileri yazın:
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
Şimdi dosyanızı kaydedin ve programı çalıştırmak için F5 tuşuna basın. Almanız gereken çıktı bu.
Çıktı:
<function <lambda> at 0x00000185C3BF81E0>
Burada neler oluyor? Daha iyi anlamak için koda bakalım.
Code Açıklama:
1. Burada, bir dizi Bu, lambda ifadesine parametre olarak ileteceğiniz şeydir.
2. Bir yazdırma ifadesini çağıran ve sonucu yazdıran bir lambda ifadesi tanımlıyoruz.
Peki program neden verdiğimiz dizeyi yazdırmıyor? Bunun nedeni, lambda ifadesinin kendisinin bir fonksiyon nesnesi döndürmesidir. Bu örnekte, lambda ifadesi çalıştırılmıyor. denilen yazdırma fonksiyonu tarafından ama basitçe dönen Fonksiyon nesnesi ve depolandığı bellek konumu. Konsola yazdırılan şey budur.
Örnek 3
Ancak şöyle bir program yazarsanız:
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
F5 tuşuna basarak çalıştırın, şöyle bir çıktı göreceksiniz.
Çıktı:
some kind of a useless lambda
Şimdi lambda çağrılıyor ve geçirdiğimiz dize konsola yazdırılıyor. Peki bu garip sözdizimi nedir ve lambda tanımı neden parantez içine alınmış? Şimdi bunu anlayalım.
Code Açıklama:
1. İşte önceki örnekte tanımladığımız aynı dize.
2. Bu bölümde, bir lambda ifadesi tanımlıyor ve ona hemen bir dize argümanı geçirerek çağırıyoruz. Buna IIFE (Infrastructured Infrastructure Functional Function) denir ve bu eğitimin ilerleyen bölümlerinde bunun hakkında daha fazla bilgi edineceksiniz.
Örnek 4
Lambda ifadelerinin ve normal fonksiyonların nasıl yürütüldüğünü anlamak için son bir örneğe bakalım. Öyleyse, pencerenizi açın. IDLE ve yeni bir dosyaya aşağıdakileri yazın:
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
Şimdi dosyayı kaydedin ve programı çalıştırmak için F5 tuşuna basın. Herhangi bir hata yapmadıysanız, çıktı şöyle bir şey olmalıdır.
Çıktı:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code Açıklama:
1. Guru adlı bir fonksiyon, ilk parametre olarak başka bir fonksiyon alır ve onu takip eden diğer argümanları da bu fonksiyona dahil eder.
2. printer_one, kendisine iletilen parametreyi yazdıran ve geri döndüren basit bir fonksiyondur.
3. printer_two, printer_one'a benzer ancak return ifadesi içermez.
4. Bu bölümde, guru fonksiyonunu çağırıyoruz ve yazıcı fonksiyonlarını ve bir dizeyi parametre olarak iletiyoruz.
5. Bu, dördüncü adımı (yani guru fonksiyonunu çağırmayı) lambda ifadeleri kullanarak gerçekleştirmek için gereken sözdizimidir.
Bir sonraki bölümde lambda fonksiyonlarının nasıl kullanılacağını öğreneceksiniz. ) (Map, () Azaltmak, ve Filtre () in Python.
Lambdaları şununla kullanma: Python Yerleşik ins
Lambda işlevleri, yerleşik yöntemleri kullanarak işlemleri gerçekleştirmenin zarif ve güçlü bir yolunu sağlar Python. Bu mümkündür çünkü lambdalar hemen çağrılabilir ve bu işlevlere argüman olarak iletilebilir.
IIFE'de Python Lambda
IIFE için standlar hemen işlev yürütmeyi başlattı. Bu, lambda fonksiyonunun tanımlandığı anda çağrılabilir olduğu anlamına gelir. Bunu bir örnekle anlayalım; uygulamanızı çalıştırın. IDLE ve aşağıdakileri yazın:
(lambda x: x + x)(2)
İşte çıktı ve kod açıklaması:
Lambdaların hemen çağrılabilme özelliği, bunları harita() ve azalt() gibi işlevler içinde kullanmanıza olanak tanır. Bu işlevleri bir daha kullanmak istemeyebileceğiniz için kullanışlıdır.
filtredeki lambdalar()
Filtre işlevi, bir dizi öğeden belirli bazı öğeleri seçmek için kullanılır. Sıra, listeler, kümeler, tuple'lar vb. gibi herhangi bir yineleyici olabilir.
Seçilecek öğeler, önceden tanımlanmış bazı kısıtlamalara bağlıdır. İki parametre alır:
- Filtreleme kısıtlamasını tanımlayan bir işlev
- Bir dizi (listeler, tuple'lar vb. gibi herhangi bir yineleyici)
Örneğin,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
İşte çıktı:
[10, 8, 7, 5, 11]
Code Açıklama:
1. İlk ifadede bazı sayıların yer aldığı dizi adı verilen bir liste tanımlıyoruz.
2. Burada, filter() işlevi tarafından döndürülen filtrelenmiş değerleri saklayacak olan filtered_result adında bir değişken bildiririz.
3. Listenin her öğesi üzerinde çalışan ve 4'ten büyükse true değerini döndüren bir lambda işlevi.
4. Filtre işlevi tarafından döndürülen sonucu yazdırın.
haritadaki lambdalar()
`map` fonksiyonu, bir dizideki her elemana belirli bir işlemi uygulamak için kullanılır. `filter()` fonksiyonu gibi, bu fonksiyon da 2 parametre alır:
- Öğeler üzerinde gerçekleştirilecek işlemi tanımlayan bir fonksiyon.
- Bir veya daha fazla dizi
Örneğin, verilen listedeki sayıların karelerini yazdıran bir program şöyledir:
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
Çıktı:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code Açıklama:
1. Burada, bazı sayıları içeren diziler adı verilen bir liste tanımlıyoruz.
2. Eşleştirilmiş değerleri saklayacak olan filtered_result adında bir değişken tanımlıyoruz.
3. Listedeki her bir eleman üzerinde çalışan ve o sayının karesini döndüren bir lambda fonksiyonu.
4. `map` fonksiyonunun döndürdüğü sonucu yazdırın.
azaltımdaki lambdalar ()
Map() gibi azaltma işlevi, bir dizideki her öğeye bir işlem uygulamak için kullanılır. Ancak işleyişi bakımından haritadan farklıdır. Bir çıktıyı hesaplamak için, azalt() işlevinin izlediği adımlar şunlardır:
) 1 Adım Tanımlanan işlemi dizinin ilk 2 öğesi üzerinde gerçekleştirin.
) 2 Adım Bu sonucu kaydedin.
) 3 Adım Kaydedilen sonuç ve sıradaki bir sonraki öğe ile işlemi gerçekleştirin.
) 4 Adım Daha fazla öğe kalmayıncaya kadar tekrarlayın.
Ayrıca iki parametre alır:
- Gerçekleştirilecek işlemi tanımlayan bir fonksiyon
- Bir dizi (listeler, tuple'lar vb. gibi herhangi bir yineleyici)
Örneğin, bir listedeki tüm öğelerin çarpımını döndüren bir program:
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
İşte çıktı:
120
Code Açıklama:
1. functools modülünden reduce fonksiyonunu içe aktarın.
2. Burada, bazı sayıları içeren diziler adı verilen bir liste tanımlıyoruz.
3. İndirgenmiş değeri saklayacak olan "ürün" adında bir değişken tanımlıyoruz.
4. Listedeki her bir eleman üzerinde çalışan bir lambda fonksiyonu. Önceki sonuca göre o sayının çarpımını döndürecektir.
5. `reduce` fonksiyonunun döndürdüğü sonucu yazdırın.
Neden lambda işlevlerini kullanıyorsunuz (ve neden kullanmıyorsunuz)?
Bir sonraki bölümde göreceğiniz gibi lambdalar, yorumlayıcı düzeyinde normal işlevlerle aynı şekilde ele alınır. Bir bakıma lambdaların, tek bir ifade döndüren işlevlerin yazılması için kompakt bir sözdizimi sağladığını söyleyebilirsiniz.
Ancak lambdaları ne zaman kullanmanın iyi bir fikir olduğunu ve ne zaman onlardan kaçınmanız gerektiğini bilmelisiniz. Bu bölümde, kullanılan tasarım ilkelerinden bazılarını öğreneceksiniz. Python geliştiriciler lambda yazarken.
Lambda ifadelerinin en yaygın kullanım alanlarından biri fonksiyonel programlamadır, çünkü Python işlevsel programlama olarak bilinen bir programlama paradigmasını (veya stilini) destekler.
Bu, bir fonksiyonu başka bir fonksiyona parametre olarak vermenize olanak tanır (örneğin, map, filter vb. fonksiyonlarda). Bu gibi durumlarda, lambda ifadeleri tek seferlik bir fonksiyon oluşturmanın ve bunu parametre olarak geçirmenin zarif bir yolunu sunar.
Ne zaman Lambda'yı kullanmamalısınız?
Karmaşık lambda işlevlerini üretim ortamında asla yazmamalısınız. Kodunuzu koruyan kodlayıcıların onu şifresini çözmesi çok zor olacaktır. Kendinizi karmaşık tek satırlık ifadeler yaparken bulursanız, uygun bir işlev tanımlamak çok daha üstün bir uygulama olacaktır. En iyi uygulama olarak, basit kodun her zaman karmaşık koddan daha iyi olduğunu hatırlamanız gerekir.
Lambdalar ve Düzenli işlevler
Daha önce de belirtildiği gibi, lambda ifadeleri, kendilerine bağlı bir tanımlayıcıya sahip olmayan fonksiyonlardır. Daha basit bir ifadeyle, isimleri olmayan (dolayısıyla anonim) fonksiyonlardır. Lambda ifadeleri ile normal fonksiyonlar arasındaki farkı gösteren bir tablo aşağıda verilmiştir. Python.
| Lambdalar | Düzenli İşlevler |
|---|---|
Sözdizimi:
lambda x : x + x
|
Sözdizimi:
def (x) : return x + x |
| Lambda fonksiyonlarının gövdelerinde yalnızca bir ifade bulunabilir. | Düzenli fonksiyonların gövdelerinde birden fazla ifade ve ifade bulunabilir. |
| Lambda fonksiyonlarının kendilerine atanmış bir adı yoktur. Bu nedenle anonim fonksiyonlar olarak da bilinirler. | Normal işlevlerin bir adı ve imzası olmalıdır. |
| Lambdalar, gövde otomatik olarak döndürüldüğü için bir return ifadesi içermez. | Değer döndürmesi gereken fonksiyonlar, bir `return` ifadesi içermelidir. |
Farklılıkların açıklaması
Lambda ile normal fonksiyon arasındaki temel fark, lambda fonksiyonunun yalnızca tek bir ifadeyi değerlendirmesi ve bir fonksiyon nesnesi vermesidir. Sonuç olarak lambda fonksiyonunun sonucunu bir önceki örnekte yaptığımız gibi isimlendirip programımızda kullanabiliriz.
Yukarıdaki örnek için normal bir fonksiyon şöyle görünecektir:
def adder (x, y): return x + y print (adder (1, 2))
Burada bir tanımlama yapmamız gerekiyor. isim hangi fonksiyon için İade sonuç ne zaman biz çağrı Lambda fonksiyonları, her zaman varsayılan olarak döndürülen tek bir ifadeye sahip oldukları için return ifadesi içermezler. Lambda fonksiyonlarını atamanıza bile gerek yoktur, çünkü hemen çağrılabilirler (önceki bölüme bakın). Göreceğiniz gibi, lambda fonksiyonları özellikle şu şekilde kullanıldığında çok güçlü hale gelir: Python'nin yerleşik işlevleri.
Ancak yine de lambdaların tek bir ifade döndüren bir fonksiyondan (yukarıdaki gibi) ne kadar farklı olduğunu merak ediyor olabilirsiniz. Çevirmen düzeyinde pek bir fark yoktur. Şaşırtıcı gelebilir ama içinde tanımladığınız herhangi bir lambda işlevi Python yorumlayıcı tarafından normal bir fonksiyon olarak ele alınır.
Bayt kodu düzeyinde, iki tanım aynı şekilde ele alınır. Python Yorumlayıcı. Şimdi, bir fonksiyona isim veremezsiniz. lambda tarafından rezerve edildiğinden PythonAncak diğer herhangi bir fonksiyon adı aynı bayt kodunu verecektir.
