Python ÖRNEKLERLE Lambda Fonksiyonları
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 yaptığımız gibi parametrelerin etrafında parantez kullanmadığımızı fark edin. Son kısım (ifade), fonksiyona sağladığınız parametreler üzerinde işlem yapan herhangi bir geçerli python ifadesidir.
Ö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))
İşte çıktı:
3
Kod 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 temel bir örnekti. Şimdi bir lambda çıktısı almayı deneyelim ve sonucu görelim. Tekrar aç şunu 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 fazlasını anlamak için koda bakalım.
Kod Açıklama
- Burada bir tanım yapıyoruz dizi lambda'ya parametre olarak ileteceğinizi.
- Print ifadesini çağıran ve sonucu yazdıran bir lambda bildiririz.
Peki program neden ilettiğimiz dizeyi yazdırmıyor? Bunun nedeni lambdanın kendisinin bir işlev nesnesi döndürmesidir. Bu örnekte lambda olmuyor denilen yazdırma işleviyle ancak basitçe dönen işlev nesnesi ve saklandığı bellek konumu. Konsolda 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)
Ve F5'e 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 konsolda yazdırılıyor. Peki bu garip sözdizimi nedir ve lambda tanımı neden parantez içinde? Şimdi bunu anlayalım.
Kod Açıklama
- Önceki örnekte tanımladığımız dizenin aynısı buradadır.
- Bu kısımda bir lambda tanımlayıp, stringi argüman olarak ileterek onu hemen çağırıyoruz. Bu, IIFE adı verilen bir şeydir ve bu eğitimin ilerleyen bölümlerinde bunun hakkında daha fazla bilgi edineceksiniz.
Örnek 4
Lambdaların ve normal fonksiyonların nasıl yürütüldüğünü anlamak için son bir örneğe bakalım. Öyleyse aç 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ının bu şekilde olması gerekir.
Çıktı:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Kod Açıklama
- İlk parametre olarak başka bir fonksiyonu ve onu takip eden diğer argümanları alan guru adında bir fonksiyon.
- Printer_one, kendisine iletilen parametreyi yazdıran ve döndüren basit bir işlevdir.
- Printer_two, Printer_one'a benzer ancak return ifadesi yoktur.
- Bu kısımda guru fonksiyonunu çağırıp, yazıcı fonksiyonlarını ve bir stringi parametre olarak geçiriyoruz.
- Bu, dördüncü adıma (yani guru işlevini çağırmak) ulaşmak için kullanılan ancak lambdaları kullanan söz dizimidir.
Bir sonraki bölümde lambda fonksiyonlarının nasıl kullanılacağını öğreneceksiniz. harita(), 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, bir lambda fonksiyonunun tanımlandığı anda çağrılabileceği anlamına gelir. Bunu bir örnekle anlayalım; seninkini ateşle 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 dayanmaktadır. 2 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]
Kod Açıklaması:
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()
harita işlevi bir dizideki her öğeye belirli bir işlemi uygulamak için kullanılır. Filter() gibi, aynı zamanda 2 parametre alır:
- Öğeler üzerinde gerçekleştirilecek işlemi tanımlayan bir işlev
- 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]
[KR1]
Kod Açıklaması:
- Burada bazı sayıların yer aldığı dizi adı verilen bir liste tanımlıyoruz.
- Eşlenen değerleri saklayacak filtered_result adında bir değişken bildiririz
- Listenin her öğesi üzerinde çalışan ve o sayının karesini döndüren bir lambda işlevi.
- Harita işlevi tarafından döndürülen 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 kaydet
) 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
Kod Açıklaması:
- functools modülünden azaltmayı içe aktar
- Burada bazı sayıların yer aldığı dizi adı verilen bir liste tanımlıyoruz.
- İndirgenmiş değeri saklayacak olan ürün adında bir değişken bildiririz
- Listenin her öğesinde çalışan bir lambda işlevi. Önceki sonuca göre bu sayının çarpımını döndürecektir.
- Azaltma işlevi tarafından döndürülen 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 python geliştiricilerinin lambda yazarken kullandığı tasarım ilkelerinden bazılarını öğreneceksiniz.
Lambdaların en yaygın kullanım durumlarından biri fonksiyonel programlamadır. Python işlevsel programlama olarak bilinen bir programlama paradigmasını (veya stilini) destekler.
Bir fonksiyonu başka bir fonksiyona parametre olarak vermenizi sağlar (örneğin haritada, filtrede vb.). Bu gibi durumlarda lambda kullanmak, tek seferlik bir işlev oluşturmanın ve onu 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 belirtildiği gibi lambdalar[vV4][J5] yalnızca kendilerine bağlı bir tanımlayıcıya sahip olmayan işlevlerdir. Daha basit bir deyişle, bunlar adı olmayan (dolayısıyla anonim) işlevlerdir. Python'da lambdalar ve normal işlevler arasındaki farkı gösteren bir tablo.
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.
Lambdaların kendileriyle ilişkili bir adı yoktur. Bu nedenle anonim işlevler 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 işlevler 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ı it. Bir lambda fonksiyonu bir return ifadesi içermez çünkü varsayılan olarak her zaman döndürülen tek bir ifadeye sahip olacaktır. Hatta bir lambda atamanız bile gerekmez çünkü hemen çağrılabilir (bir sonraki bölüme bakın). Aşağıdaki örnekte göreceğiniz gibi, lambdalar bunları 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.
Diyagramda görebileceğiniz gibi, iki tanım bytecode'a dönüştürüldüğünde python yorumlayıcısı tarafından aynı şekilde ele alınır. Artık bir işlevi adlandıramazsınız lambda tarafından rezerve edildiğinden Python, ancak diğer herhangi bir işlev adı aynı bayt kodunu [KR6] verecektir.
ÖZET
- Anonim işlevler olarak da bilinen lambdalar, bir isme (yani bir tanımlayıcıya) ihtiyaç duymayan küçük, kısıtlı işlevlerdir.
- Her lambda fonksiyonu Python 3 temel parçası vardır:
- Lambda anahtar sözcüğü.
- Parametreler (veya bağlı değişkenler) ve
- İşlev gövdesi.
- Lambda yazmanın sözdizimi şöyledir: lambda parametresi: ifade
- Lambdaların herhangi bir sayıda parametresi olabilir, ancak bunlar parantez içine alınmaz
- Bir lambdanın işlev gövdesinde yalnızca 1 ifade bulunabilir ve bu, varsayılan olarak döndürülür.
- Bayt kodu düzeyinde, yorumlayıcı tarafından lambdaların ve normal işlevlerin nasıl ele alındığı arasında pek bir fark yoktur.
- Lambdalar IIFE'yi şu sözdizimi aracılığıyla destekler: (lambda parametresi: ifade)(argüman)
- Lambdalar genellikle aşağıdaki Python yerleşikleriyle birlikte kullanılır:
- Filtre: filtre (lambda parametresi: ifade, yinelenebilir dizi)
- Harita: harita (lambda parametresi: ifade, yinelenebilir diziler)
- Azalt: azalt (lambda parametresi1, parametre2: ifade, yinelenebilir dizi)
- Üretim ortamında karmaşık lambda fonksiyonları yazmayın çünkü kod bakımı yapanlar için zor olacaktır.
[J5]Bir tablo ekledim ancak farklılıkları anlamak için açıklama gerekli.