Python'da Lambda Fonksiyonları

Lambda İşlevleri nedir?


Python'da işlevler nesnelerdir: değişkenlere atanabilir, diğer işlevlerden döndürülebilir, listelerde veya diktelerde saklanabilir ve diğer işlevler için parametre olarak iletilebilir. Örneğin, map() yerleşik işlev. Onun sözdizimi map(function, iterable) ve kolayca uygulamak için kullanılır function her elemanına iterable.

map() aslında bir döndürür iterator nesne. Uygulamada, sonucu şu şekilde atarız: list, tuple, set, dict, vb, hangisi daha uygunsa.

Bir listedeki her terimin karesini almak istediğinizi varsayalım. map() işlev. Bunu yapmak için, bir tanımlayacağız square() işlevini kullanın ve bunu parametre olarak kullanın map():

my_list = [1,2,3,4,5]
def square(x):
    return x**2

my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]


Ancak, eğer bizim tek kullanımımız square() işlevi bu listeyi oluşturmaktır, kullanmak daha temizdir lambda işlevi:

my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

Python'da, lambda işlevler, adlarını ve sözdizimlerini Alonzo Church'ten alan anonim işlevlerdir. Lambda hesabı. Sözdizimi şöyledir:

lambda x_1,..., x_n : expression(x_1, ..., x_n)

Bu, değişkenleri girdi olarak alan anonim bir işlev oluşturur. x_1, ..., x_n ve değerlendirilenleri döndürür expression(x_1, ..., x_n).

Amacı lambda ile yaptığımız gibi, fonksiyonları parametre olarak kabul eden fonksiyonlar için parametre olarak kullanılacaktır. map() üstünde. Python atamanıza izin verir lambda bir değişken işlevi görür, ancak PEP 8 stil kılavuzu karşı tavsiyede bulunur. Bir değişkene basit bir fonksiyon atamak istiyorsanız, bunu tek satırlık bir tanım olarak yapmak daha iyidir. Bu, ortaya çıkan nesnenin doğru şekilde adlandırılmasını sağlayarak geri izleme okunabilirliğini geliştirir:

anonymous_square = lambda x : x**2def named_square(x): return x**2print(anonymous_square.__name__)
print(named_square.__name__)


a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)

Neden Lambda İşlevlerini Kullanmalı?

Son paragraftan sonra, neden kullanmak istediğinizi merak ediyor olabilirsiniz. lambda işlev. Sonuçta, bir aletle yapılabilecek her şey lambda işlev, adlandırılmış bir işlevle yapılabilir.

Bunun cevabı şudur lambda işlevi amaç bir hesaplamayı temsil eden daha büyük ifadelerin içinde yaşamaktır. Bunu düşünmenin bir yolu, değişkenler ve değerlerle analoji yapmaktır. Aşağıdaki kodu göz önünde bulundurun:

x = 2

Değişken x tamsayı için bir yer tutucudur (veya bir addır) 2. Örneğin, arama print(x) ve print(2) tam olarak aynı çıktıyı verir. Fonksiyonlar söz konusu olduğunda:

def square(x): return x**2

Bu fonksiyon square() bir sayının karesini almanın hesaplanması için bir yer tutucudur. Bu hesaplama isimsiz bir şekilde şu şekilde yazılabilir: lambda x: x**2.

Bu felsefi incelemenin ardından, bazı uygulama örneklerini görelim. lambda fonksiyonlar.

sorted() İşleviyle Lambda'yı Kullanma

The sorted() işlev bir yinelemeyi sıralar. Bir işlevi olduğu gibi kabul eder key bağımsız değişken ve yinelemenin her bir öğesine uygulanan işlevin sonucu, öğeleri sıralamak için kullanılır.

Bu mükemmel bir şekilde uygundur lambda işlev: ayarlayarak key ile parametre lambda fonksiyonunda, elemanların herhangi bir niteliğine göre sıralayabiliriz. Örneğin, bir isim listesini soyadına göre sıralayabiliriz:

name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
​
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
​
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']

Lambda'yı 'filter()' İşleviyle Kullanma

The filter() işlev aşağıdaki sözdizimine sahiptir: filter(function, iterable) ve öğelerini çıkarır iterable değerlendiren function(element) doğru (bir şeye benzer) WHERE SQL'de yan tümce). Kullanabiliriz lambda için parametreler olarak işlev görür filter() bir yinelemeden öğeleri seçmek için.

Aşağıdaki örneği düşünün:

num_list = list(range(0,100))
​
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
​
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]

filter() uygular lambda işlev lambda x: (x % 3 == 0) and (x % 5 == 0) her bir elemanına range(0,100), ve bir filter nesne. Öğelere şu şekilde döküm yaparak erişiyoruz: list.

Map() İşleviyle Lambda'yı Kullanma


Son örneğimiz, girişte gördüğümüz bir şey – map() işlevi. map() işlev sözdizimi şöyledir: map(function, iterable), ve map() geçerlidir function her bir elemanına iterable, dönen bir map yayınlanarak erişilebilen nesne list.

Bunun listelere nasıl uygulanabileceğini gördük, ancak kullanılarak diktelere de uygulanabilir. dict.items() yöntem:

my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb

veya bir dizgeye:

my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Biz kullanabilirsiniz map() dahiyane şekillerde işlev görür – bir örnek, birçok işlevi aynı girdiye uygulamaktır.

Örneğin, bir metin dizesi alan bir API yaptığınızı ve buna bir işlev listesi uygulamak istediğinizi varsayalım.

Her işlev, metinden bazı özellikler çıkarır. Çıkarmak istediğimiz özellikler kelime sayısı, ikinci kelime ve dördüncü kelimenin dördüncü harfidir:

def number_of_words(text):
  return len(text.split())
​
def second_word(text):
  return text.split()[1]
​
def fourth_letter_of_fourth_word(text):
  return text.split()[3][3]
​
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
​
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
​
feature_list = list(map_obj)
​
print(feature_list)
[5, 'had', 't']

Sonuç


Bu kılavuzda, şu işlevleri inceledik: lambda Python'da işlevler. bunu gördük lambda işlevler, diğer işlevler için satır içi işlev parametresi olarak kullanılacak anonim işlevlerdir. Bazı kullanım durumlarının yanı sıra ne zaman kullanılmayacağını da gördük.

Programlama yaparken, Donald Knuth'un şu sözünü akılda tutmak önemlidir: "Programlar insanlar tarafından okunmalı ve bilgisayarların çalıştırılması için yalnızca rastlantı eseri." Bu düşünceyle birlikte, lambda işlevler, kodumuzu basitleştirmek için yararlı bir araçtır, ancak akıllıca kullanılmalıdır.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı