Pratik Örneklerle Python lambda Fonksiyonları
Yayınlanan: 2021-06-21Python lambda işlevleri, küçük ve adsız olarak tanımlanan işlevlerdir. Python'da, bir işlevi tanımlamak için 'def' anahtar kelimesi kullanılır. Ancak, anonim işlevler söz konusu olduğunda, bu işlevleri tanımlamak için 'lambda' anahtar sözcüğü kullanılır. Bu nedenle, adı “lambda işlevleri. Fonksiyonlara bir isim verilmiş veya atanmamış olabilir.
Python'daki normal işlevlerle karşılaştırıldığında, lambda işlevleri kısadır.
Python, Java, C++, C# vb. programlama dillerinin söz dizimlerinde yer alan söz dizimlerine lambda işlevleri eklenmiştir. ML veya LISP Dillerinde temel bir kavram olarak kullanılırken.
Makale, python lambda fonksiyonları kavramına ve kullanımlarına odaklanacaktır .
Programlama dilinin türüne bağlı olarak, lambda işlevleri aşağıdaki terimlerle birbirinin yerine kullanılabilir:
- anonim işlevler
- Lambda fonksiyonları
- Lambda ifadeleri
- Lambda soyutlamaları
- Lambda formu
- İşlev değişmezleri
İçindekiler
Lambda Hesabı
Lambda hesaplaması, lambda ifadelerinin üzerine kurulduğu bir hesaplama modelidir. Lambda hesabı saf soyutlamaya dayalıdır ve Alonzo Church tarafından resmileştirilmiştir. Lambda soyutlamaları olarak da bilinir, Alonzo Church tarafından oluşturulan orijinal modeli ifade eder.
Herhangi bir hesaplama bu kavramla kodlanabilir.
lambda işlevinin sözdizimi:
Python'da lambda işlevleri kullanılırken aşağıdaki sözdizimi kullanılır.
lambda argümanları: ifade
python içindeki lambda işlevinde herhangi bir sayıda argüman olabilir . Ancak işlevlerin yalnızca bir ifadesi olabilir. Bu ifade önce değerlendirilir ve sonra döndürülür. Lambda işlevlerinin kullanımı, işlev nesnelerinin bir gereksiniminin olduğu her yerde bulunur.
İki argümanlı isimsiz bir fonksiyonun lambda ile tanımlandığı ancak herhangi bir değişkene bağlı olmadığı bir durum düşünüldüğünde:
lambda x, y: x + y
Burada, iki argüman fonksiyon tarafından alınır ve toplam döndürülür.
Bir lambda işlevi tarafından gösterilen birkaç özellik vardır:
- Lambda işlevinin gövdesinde herhangi bir ifade olamaz, ancak yalnızca ifadeler içerebilir.
- Yürütme kodu yalnızca tek bir satırdır.
- Tip açıklamaları, python içindeki lambda işlevi tarafından desteklenmez .
- Anında çağırmaya izin verilir.
ifadeler kullanılamaz
Bahsedildiği gibi lambda fonksiyonları tanımlanırken herhangi bir ifade olamaz. Kullanıcı pass, return, boost veya assert gibi ifadeler kullanırsa, bir SyntaxError istisnası olacaktır. İstisnanın sonucu aşağıdaki kod aracılığıyla gösterilebilir.
Kaynak
Yukarıdaki kodda, lambda işlevinin gövdesindeki assert ifadesini içeren kod ayrıştırıldığında bir sözdizimi hatasıyla sonuçlanmıştır.
lambda işlevi yalnızca tek bir ifade içerir
Python'daki tüm standart normal işlevlerin aksine, python'daki bir lambda işlevi yalnızca tek bir ifade içerebilir. Lambda işlevinin gövdesi, parantez içinde birden çok satır kullanılarak ifadenin her yerine yayılmasını sağlayabilir. Ancak yine de tek bir ifade olarak kalır.
Kaynak
Bir "tek" argümanı olduğunda "tek" dizesi, "çift" bir argüman olduğunda "çift" dizesi döndürülür. Yukarıdaki kodda parantez içinde olduğu için iki satır kullanılmıştır. Ama tek bir ifade olarak kalır.
Tip açıklamaları
Python'da "tip ipucu"nun kullanılabilirliği ile artık python'daki lambda işlevleri yerine normal işlevler tercih ediliyor. mypy, pyre vb. araçların mevcudiyeti ile tip hatası full_name() ile yakalanabilir. Lambda işleviyle ilişkili sözdizimi hatası, çalışma süresi boyunca ortaya çıkar.
Hemen Çağrılan İşlev Yürütme (IIFE)
Bu özellik, bir python yorumlayıcısının dışında kullanılamaz. Python'daki lambda ifadesinin tanımı, map(), vb. gibi daha yüksek dereceli işlevlere geçirilebilir.
Bir lambda işlevindeki argümanlar
Python lambda ifadelerinde aşağıdaki gibi argümanların iletilmesi için farklı yollar desteklenir :
- konumsal argümanlar
- Anahtar kelime bağımsız değişkenleri olarak da bilinen adlandırılmış bağımsız değişkenler
- Varargs olarak da adlandırılan değişken argüman listesi.
- Anahtar kelime argümanlarının değişken listesi
- Yalnızca anahtar kelimeler içeren argümanlar.
Python Lambda İfadesinde Dekoratörler
Dekoratör, bir sınıfa veya fonksiyona bir davranış eklenmesine izin veren bir model uygulaması olarak tanımlanabilir. @decorator sözdizimi, bir dekoratörü python'da ifade etmek için bir işlevin öneki olarak kullanılır
Yalnızca 'Python' argümanıyla, decored_function() yazdırılır. Yazdırılan ek davranış, 'decorated_function' işlevi çağırmadır.
Python, bir lambda işlevine bir dekoratör eklenmesine izin verir, ancak @decorator sözdiziminin kullanılması gerekli değildir. Dekoratör, lambda işlevini çağıran bir işlev gibi davranır.
<lambda>, lambda işlevinin tanımlandığı yerde görünür. Normal bir işlev durumunda, yani add_two durumunda, açıkça tanımlanır.
Hata ayıklama amacıyla lambda işlevleri bu şekilde dekore edilebilir.
kapatma
Python'daki Closure(), işlevde kullanılan parametreler dışındaki serbest değişkenlerin, işlev kapsamında tanımlanan belirli değerlere bağlı olduğu bir işlev olarak tanımlanır. Kapanışları her yerden arayabiliriz. Python'daki Lambda işlevleri, normal işlevlerin bir kapatma işlevi gördüğü şekilde kapatma işlevi görebilir.
lambda fonksiyonlarının kullanımı
- Bir işlevi daha kısa süre kullanmamız gerektiğinde, bu durumda lambda işlevleri kullanılır.
- Fonksiyonların daha yüksek dereceli bir fonksiyona geçirilmesi için lambda fonksiyonları uygulanır. İşlevler, bu üst düzey işlevlere bağımsız değişkenler olarak iletilir.
- Python'daki lambda işlevleri, map(), vb. gibi diğer yerleşik işlevlerle birlikte kullanılabilir.
Lambda işlevlerini test etme
doctest ve unittest modüllerinin kullanımıyla python'daki lambda işlevleri test edilebilir:
- Unittest modülleri, normal işlevler gibi lambda işlevlerini test eder.
- doctest modülü durumunda , testin yürütülmesi için python kodu docstring'den çıkarılır . lambda işlevinin sözdizimi docstring'e izin vermiyor . Ancak, adlandırılmakta olan lambda'nın _doc_ öğesine bir dize atanabilir.
Python Lambda İşlevlerine Örnekler
Aşağıdaki kodda, bir argümanın döndürüldüğü yerde “identity” adında bir fonksiyon tanımlanmıştır. “def” anahtar sözcüğü kullanılarak standart bir python işlevi olarak tanımlanır.
>>> tanım kimliği (x);
….. x döndür
Burada x, “özdeşlik” işlevi tarafından bir argüman olarak alınır ve çağrıldığında argümanı döndürür.
Aynı kodu lambda kullanarak yazmak:
lambda x: x
İfade üç bölümden oluşur: Anahtar kelime olarak Lambda, daha sonra bağlı bir değişken olan x ve kodun gövdesi olan X.
- Bağlı değişken, bir lambda işlevine iletilen argümanı ifade eder. Bununla birlikte, serbest değişkenler, bağlı olmayan ve ifade gövdesinde referans alınabilen değişkenlerdir. Sabit, serbest bir değişken veya işlevin kapsamında tanımlanan değişkenler olabilir.
Yukarıdaki ifade şu şekilde detaylandırılabilir:
>>> lambda x: x + 1
Burada fonksiyon argümana 1 ekliyor. İşlev, bir bağımsız değişkene parantezler kullanılarak argümanla birlikte her iki işlevi de çevrelerken eklenebilir.
>>>(lambda x: x + 1)(2)
3
Bir ifadedeki değeri hesaplamak için bir indirgeme stratejisi uygulanır. Yukarıdaki örnekte olduğu gibi, "x" bağlı değişkeni, argüman 2 ile değiştirilebilir.
(lambda x: x + 1 )(2) = Lambda 2: 2 + 1
= 2 + 1
= 3
Lambda fonksiyonu bir ifade olduğundan isimlendirme yapılabilir ve yukarıdaki kod şu şekilde yeniden yazılabilir.
>>> add_one = Lambda x : x + 1
>>> add_one(2)
3
Bu, yazmaya eşdeğerdir:
def add_one(x):
dönüş x + 1
Lambda işlevleri tarafından tek bir argüman alınır. Ayrıca python'da lambda işlevi tanımlanırken işlevlerin etrafında parantez yoktur.
Bir python lambda işlevine birden fazla argüman iletmek için argümanlar listelenir ve virgül (,) kullanılarak ayrılır. Argümanlar listelenirken parantez kullanılmamalıdır. Çoklu argüman fonksiyonlarının bir örneği aşağıda gösterilmiştir:
Burada, full_name altındaki lambda işlevi tarafından iki argüman alınır. İlk ve son parametreleri enterpolasyon yapan işlev tarafından bir dize döndürülür . Kod, lambda işlevlerini tanımlarken herhangi bir parantez kullanılmadığını gösteriyor. Lambda işlevinin çağrılması, python'daki standart bir işlevin çağrılmasıyla aynı yolu izler, yani argümanları çevreleyen parantez kullanarak.
Filter() ile Python lambda fonksiyonları
Python'da, filter() işlevi , bir argümanı liste ve işlev olarak kabul eder. Listenin öğeleri aracılığıyla, yeni bir öğe listesi döndüren işlev çağrılabilir. Bu yeni oluşturulan listenin işlevi True olarak değerlendirilir .
Bir listede bulunan çift sayıları filtrelemek için kullanılan bir filter() işlevi örneği aşağıda gösterilmiştir.
Kaynak
Program tarafından üretilen çıktı yeni listedir: [4, 6, 8, 12].
map() ile Python lambda işlevi
python map() işlevinde bir liste ve bir işlev argüman olarak alınır. Listede bulunan tüm öğeler, işlev tarafından döndürülen öğelerle birlikte yeni oluşturulan bir listeyi döndüren işlevi çağırır.
Çözüm
Python lambda işlevleri, tek satırlı olan ve adsız, yani anonim bir işlev olarak bildirilen işlevlerdir. Yalnızca bir ifadeye sahip olabilen bir lambda işlevine birkaç sayıda argüman iletilebilir. Bazen lambda işlevi, bir argüman olarak diğer işlevlere geçirilebilir. Python'da 'def' anahtar kelimesiyle tanımlandığında işlev, normal bir işlev gibi davranabilir.
Bu nedenle makale, python'daki lambda fonksiyonlarının kavramlarını, diğer fonksiyonlarla uygulamalarını ve ayrıca birkaç örnek açıkladı. Programlama dili üzerinde uzmanlık kazanmak ve kodlama becerilerinizde ustalaşmak istiyorsanız, upGrad tarafından sunulan “ Veri Biliminde Yönetici PG Programı ” kursunu inceleyebilirsiniz. Veri biliminde kodlama becerilerini elde etmek isteyen 21 ila 45 yaş arasındaki tüm giriş seviyesi profesyoneller için özel olarak tasarlanmıştır. Hayallerinize doğru bir adım atmak istiyorsanız öne çıkın ve kursun faydalarına bir göz atın. Uygulamalı endüstri projeleri ile IIIT-B tarafından sağlanan kurs, ihtiyaçlarınızı karşılamak ve sizi gelecekteki en iyi endüstrilere hazırlamak için tasarlanmıştır.
Normal bir işlev ile bir lambda işlevi arasındaki fark nedir?
Python'da bir fonksiyonun def anahtar sözcüğü kullanılarak tanımlandığını biliyoruz. Benzer şekilde, lambda anahtar sözcüğü kullanılarak bir lambda işlevi tanımlanır. İkisi arasındaki farkı derinlemesine anlamak için aşağıdaki örneği inceleyin:
# Normal fonksiyon def sq(x): dönüş x*x # Lambda fonksiyonu lambda_sq = lambda x: x*x # Normal fonksiyonu çağırmak # Tanımlı fonksiyon print(sq(10)) # lambda fonksiyonunu kullanmak print(lambda_sq(10)) }
Yukarıdaki örnek, bir sayının karesini hesaplayan 2 işlevi göstermektedir. Lambda olmadan, bir sq(x) işlevi oluşturmalıyız ve ardından kareyi döndürmeliyiz. Öte yandan lambda ile tüm fonksiyon tek bir satıra kaynamış durumda. Lambda bir iade ifadesi gerektirmez.