Python'da Lambda İşlevleri Nasıl Kullanılır [Örneklerle]

Yayınlanan: 2022-11-10

Bu öğreticide, söz diziminden lambda işlevlerini tanımlamaya ve kod örnekleriyle farklı kullanım durumlarına kadar Python'daki lambda işlevleri hakkında her şeyi öğreneceksiniz.

Python'da lambdalar, kısa bir sözdizimine sahip anonim işlevlerdir ve diğer yararlı yerleşik işlevlerle birlikte kullanılabilir. Bu öğreticinin sonunda, lambda işlevlerini nasıl tanımlayacağınızı ve bunları normal Python işlevleri üzerinde ne zaman kullanmayı düşünmeniz gerektiğini öğrenmiş olacaksınız.

Hadi başlayalım!

Python Lambda İşlevi: Sözdizimi ve Örnekler

Python'da bir lambda işlevi tanımlamak için genel sözdizimi:

 lambda parameter(s):return value

Yukarıdaki genel sözdiziminde:

  • lambda , bir lambda işlevi tanımlamak için kullanmanız gereken anahtar sözcüktür ve ardından işlevin alması gereken bir veya daha fazla parametre gelir.
  • Parametreleri ve dönüş değerini ayıran bir iki nokta üst üste işareti vardır.

Bir lambda işlevi tanımlarken, tek bir kod satırına yayılan bir ifadeyi değerlendirerek dönüş değerinin hesaplanmasını sağlamalısınız. Örnekleri kodladığımızda bunu daha iyi anlayacaksınız.

Python Lambda Fonksiyon Örnekleri

Lambda işlevlerini anlamanın en iyi yolu, normal Python işlevlerini lambda işlevleri olarak yeniden yazarak başlamaktır.

Bir Python REPL'de veya Geekflare'nin çevrimiçi Python düzenleyicisinde kod yazabilirsiniz.

#1 . Argüman olarak bir sayıyı ( num ) alan ve sayının karesini döndüren aşağıdaki square() işlevini göz önünde bulundurun.

 def square(num): return num*num

İşlevi argümanlarla çağırabilir ve düzgün çalıştığını doğrulayabilirsiniz.

 >>> square(9) 81 >>> square(12) 144

Bu lambda ifadesini bir değişken adına atayabilirsiniz, örneğin, işlev tanımını daha özlü hale getirmek için square1 : square1 = lambda num: num*num ve ardından argüman olarak herhangi bir sayı ile square1 işlevini çağırın. Ancak lambdaların isimsiz fonksiyonlar olduğunu biliyoruz, bu yüzden onları bir değişkene atamaktan kaçınmalısınız.

square() işlevi için parametre num ve dönüş değeri num*num . Bunları tanımladıktan sonra, onları lambda ifadesine bağlayabilir ve gösterildiği gibi bir argümanla çağırabiliriz:

 >>> (lambda num: num*num)(2) 4

Bu, bir işlevi tanımladıktan hemen sonra çağırdığımız Hemen Çağrılan İşlev İfadesi kavramıdır.

# 2 . Daha sonra, num1 ve num2 sayılarını alan ve bunların toplamını, num1 + num2 döndüren başka bir basit add() işlevini yeniden yazalım.

 def add(num1,num2): return num1 + num2

Argüman olarak iki sayı ile add() işlevini çağıralım:

 >>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18

Bu durumda, num1 ve sayı2 iki parametredir ve dönüş değeri num1 + num2 num2

 >>> (lambda num1, num2: num1 + num2)(3,7) 10

Python işlevleri, parametreler için varsayılan değerler de alabilir. add() işlevinin tanımını değiştirelim ve num2 parametresinin varsayılan değerini 10 olarak ayarlayalım.

 def add(num1, num2=10): return num1 + num2

Aşağıdaki işlev çağrılarında:

  • İlk işlev çağrısında, num1 değeri 1'dir ve num2 değeri 3'tür. İşlev çağrısında num2 değerini ilettiğinizde, o değer kullanılır; fonksiyon 4 döndürür.
  • Ancak, yalnızca bir bağımsız değişken ( num1 7'dir) iletirseniz, num2 için varsayılan 10 değeri kullanılır; işlev 17 değerini döndürür.
 >>> add(1,3) 4 >>> add(7) 17

Belirli parametreler için varsayılan değerleri lambda ifadesi olarak alan fonksiyonları yazarken, parametreleri tanımlarken varsayılan değeri belirtebilirsiniz.

 >>> (lambda num1, num2 = 10: num1 + num2)(1) 11

Python'da Lambda İşlevlerini Ne Zaman Kullanmalısınız?

Python'da lambda fonksiyonlarının temellerini öğrendiğinize göre, işte birkaç kullanım örneği:

  • Dönüş ifadesi tek bir kod satırı olan bir fonksiyonunuz varsa ve aynı modülde başka bir yerde fonksiyona başvurmanız gerekmiyorsa, lambda fonksiyonlarını kullanabilirsiniz. Bunu anlamak için birkaç örnek de kodladık.
  • map(), filter() ve Reduce() gibi yerleşik işlevleri kullanırken lambda işlevlerini kullanabilirsiniz.
  • Lambda işlevleri, listeler ve sözlükler gibi Python veri yapılarının sıralanmasında yardımcı olabilir.

Python Lambda'yı Yerleşik İşlevlerle Kullanma

1. Lambda'yı map() ile kullanma

map() işlevi bir yinelenebilir ve bir işlev alır ve işlevi yinelenebilirdeki her öğeye, gösterildiği gibi uygular:

python-lambda-haritalı

Bir nums listesi oluşturalım ve nums listesindeki her sayının karesini içeren yeni bir liste oluşturmak için map() işlevini kullanalım. Kare alma işlemini tanımlamak için lambda işlevinin kullanımına dikkat edin.

 >>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]

map() işlevi bir map nesnesi döndürdüğü için onu bir listeye çevirmeliyiz.

️ Python'daki map() işleviyle ilgili bu eğiticiye göz atın.

2. Lambda'yı filter() ile kullanma

Sayıların bir listesi olan nums tanımlayalım:

 >>> nums = [4,5,6,9]

Bu listeyi filtrelemek ve yalnızca tek sayıları saklamak istediğinizi varsayalım.

Python'un yerleşik filter() işlevini kullanabilirsiniz.

filter() işlevi bir koşul ve yinelenebilir bir : filter(condition, iterable) . Sonuç, yalnızca koşulu karşılayan orijinal yinelenebilir öğedeki öğeleri içerir. Döndürülen nesneyi list gibi yinelenebilir bir Python'a dönüştürebilirsiniz.

python-lambda-filtreli

Tüm çift sayıları filtrelemek için yalnızca tek sayıları tutacağız. Yani lambda ifadesi lambda num: num%2!=0 olmalıdır. num%2 miktarı, num 2'ye bölündüğünde kalandır.

  • num%2!=0 , num tek olduğunda True ve
  • num%2!=0 , num çift olduğunda False olur.
 >>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]

3. Lambda'yı azaltma() ile kullanma

reduce() işlevi, yinelenebilir ve bir işlev alır. İşlevi yinelenebilir öğelere yinelemeli olarak uygulayarak yinelenebilirliği azaltır.

python-lambda-azaltma ile

reduce() işlevini kullanmak için, onu Python'un yerleşik functools modülünden içe aktarmanız gerekir:

 >>> from functools import reduce

nums listesindeki tüm sayıların toplamını hesaplamak için reduce() işlevini kullanalım. İndirgeyici toplam işlevi olarak bir lambda ifadesi tanımlarız: lambda num1,num2:num1+num2 .

İndirgeme işlemi şu şekilde gerçekleşecektir: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Burada f lambda işlevi tarafından tanımlanan listenin iki öğesi üzerinde toplama işlemi.

 >>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24

Sıralamayı Özelleştirmek için Python Lambda İşlevleri

map() , filter() ve reduce() gibi yerleşik Python işlevleriyle lambda işlevlerini kullanmaya ek olarak, bunları yerleşik işlevleri ve sıralama için kullanılan yöntemleri özelleştirmek için de kullanabilirsiniz.

resim

1. Python Listelerini Sıralama

Python listeleriyle çalışırken, genellikle onları belirli sıralama kriterlerine göre sıralamanız gerekir. Python listelerini yerinde sıralamak için yerleşik sort() yöntemini kullanabilirsiniz. Listenin sıralanmış bir kopyasına ihtiyacınız varsa, sorted() işlevini kullanabilirsiniz.

Python'un sorted sorted() işlevini kullanmak için sözdizimi sorted(iterable, key=...,reverse= True | False) .

key parametre, sıralamayı özelleştirmek için kullanılır.
reverse parametre True veya False olarak ayarlanabilir; varsayılan değer False .

Sayı ve dizi listelerini sıralarken, varsayılan sıralama sırasıyla artan sırada ve alfabetik sıradadır. Ancak, bazen sıralama için bazı özel ölçütler tanımlamak isteyebilirsiniz.

Aşağıdaki liste fruits göz önünde bulundurun. Listenin sıralanmış bir kopyasını almak istediğinizi varsayalım. Dizeleri, içindeki 'p' oluşum sayısına göre azalan düzende sıralamanız gerekir.

 >>> fruits = ['apple','pineapple','grapes','mango']

İsteğe bağlı key parametresini kullanma zamanı. Bir dize Python'da yinelenebilir bir karakterdir ve içindeki bir karakterin oluşum sayısını elde etmek için yerleşik .count() yöntemini kullanabilirsiniz. Bu yüzden key lambda x:x.count('p') olarak ayarladık, böylece sıralama dizgede 'p'nin meydana gelme sayısını temel alır.

 >>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']

Bu örnekte:

  • Sıralamanın key , 'p' karakterinin oluşum sayısıdır ve bir lambda ifadesi olarak tanımlanır.
  • reverse parametreyi True olarak ayarladığımız için, sıralama 'p' oluşum sayısının azalan düzeninde gerçekleşir.

fruits listesinde, 'ananas' 3 kez 'p' içerir ve 'elma', 'üzüm' ve 'mango' dizeleri sırasıyla 2, 1 ve 0 'p' oluşumunu içerir.

Kararlı Sıralamayı Anlama

Başka bir örnek düşünün. Aynı sıralama kriteri için fruits listesini yeniden tanımladık. Burada 'p', 'elma' ve 'üzüm' dizilerinde sırasıyla iki ve bir kez bulunur. Ve asla 'mango' ve 'kavun' dizelerinde oluşmaz.

 >>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']

Her ikisinde de 'p' karakteri bulunmasa da, çıktı listesinde 'mango', 'kavun'dan önce gelir. Ama bu neden böyle? sorted() işlevi, kararlı bir sıralama gerçekleştirir; bu nedenle 'p' sayısı iki dize için eşit olduğunda, orijinal fruits listesindeki öğelerin sırası korunur.

Hızlı bir alıştırma olarak, fruits listesinde 'mango' ve 'kavun' konumlarını değiştirin, listeyi aynı kritere göre sıralayın ve çıktıyı gözlemleyin.

️ Python listelerini sıralama hakkında daha fazla bilgi edinin.

2. Python Sözlüğünü Sıralama

Python sözlüklerini sıralarken lambdaları da kullanabilirsiniz. Öğeleri ve fiyatlarını içeren aşağıdaki price_dict sözlüğünü göz önünde bulundurun.

 >>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }

Bir sözlüğün anahtar/değer çiftlerini bir demet listesi olarak almak için yerleşik sözlük yöntemini .items() kullanabilirsiniz:

 >>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

Python'da tüm yinelenebilirler: listeler, demetler, dizeler ve daha fazlası sıfır indekslemeyi takip eder. Bu nedenle, ilk öğe 0 dizininde, ikinci öğe 1 dizininde vb.

Sözlükteki her bir öğenin fiyatı olan değere göre sıralamak istiyoruz. price_dict_items listesindeki her bir demette, dizin 1'deki öğe fiyattır. Bu yüzden key lambda x:x[1] olarak ayarladık, çünkü sözlüğü sıralamak için indeks 1'deki öğeyi, yani fiyatı kullanacaktır.

 >>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Çıktıda, sözlük öğeleri artan fiyatlara göre sıralanmıştır: 'Şeker' ile başlayan, 3 birim fiyatla 'Bal', 15 birim fiyatla.

️ Daha fazla bilgi edinmek için, bir Python sözlüğünü anahtar ve değere göre sıralamayla ilgili bu ayrıntılı kılavuza göz atın.

Özetliyor

İşte buyur! Lambda işlevlerini nasıl tanımlayacağınızı ve bunları diğer yerleşik Python işlevleriyle nasıl etkili bir şekilde kullanacağınızı öğrendiniz. İşte önemli çıkarımların bir özeti:

  • Python'da lambdalar, birden çok argüman alabilen ve bir değer döndürebilen anonim işlevlerdir ; bu dönüş değerini oluşturmak için değerlendirilecek ifade bir kod satırı olmalıdır. Küçük fonksiyon tanımlarını daha özlü hale getirmek için kullanılabilirler.
  • Lambda işlevini tanımlamak için şu söz dizimini kullanabilirsiniz: lambda parametre(ler): dönüş değeri .
  • Önemli kullanım durumlarından bazıları, bunları map() , filter() ve Reduce reduce() işlevleriyle ve Python yinelemelerinin sıralamasını özelleştirmek için anahtar parametre olarak kullanmayı içerir.

Ardından, Python'da kat bölme işlemini nasıl yapacağınızı öğrenin.