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üriterator
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ğızsquare()
işlevini kullanın ve bunu parametre olarak kullanınmap()
:
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**2
def named_square(x): return x**2
print(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.