از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
توابع لامبدا در پایتون
سرفصلهای مطلب
توابع لامبدا چیست؟
را
در پایتون، توابع اشیاء هستند: آنها را می توان به متغیرها نسبت داد، می توان آنها را از توابع دیگر برگرداند، در لیست ها یا دیکت ها ذخیره کرد و به عنوان پارامتر برای توابع دیگر ارسال کرد. به عنوان مثال، را در نظر بگیرید map()
عملکرد داخلی نحو آن است map(function, iterable)
و برای اعمال دستی استفاده می شود function
به هر عنصر از iterable
.
map()
در واقع یک را برمی گرداندiterator
هدف – شی. در عمل، ما نتیجه را به صورت الف می گیریمlist
،tuple
،set
،dict
و غیره، هر کدام راحت تر است.
را
فرض کنید که می خواهید هر عبارت یک لیست را با استفاده از علامت مربع مربع کنیدmap()
تابع. برای انجام این کار، a را تعریف می کنیمsquare()
تابع و از آن به عنوان پارامتر برای استفاده کنید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)
را
با این حال، اگر تنها استفاده از ما square()
تابع ایجاد این لیست است، استفاده از a تمیزتر است lambda
تابع:
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)
در پایتون، lambda
توابع توابع ناشناس هستند که نام و نحو خود را از آلونزو چرچ گرفته اند حساب لامبدا. نحو آنها این است:
lambda x_1,..., x_n : expression(x_1, ..., x_n)
این یک تابع ناشناس ایجاد می کند که متغیرها را به عنوان ورودی دریافت می کند x_1, ..., x_n
و ارزیابی شده را برمی گرداند expression(x_1, ..., x_n)
.
را
هدف از lambda
توابع به عنوان پارامتر برای توابعی که توابع را به عنوان پارامتر می پذیرند، استفاده می شود، همانطور که ما با آن انجام دادیم map()
در بالا. پایتون به شما این امکان را می دهد که a را اختصاص دهید lambda
تابع یک متغیر است، اما راهنمای سبک PEP 8 مخالفت می کند اگر می خواهید یک تابع ساده را به یک متغیر اختصاص دهید، بهتر است آن را به صورت یک تعریف یک خطی انجام دهید. این اطمینان حاصل می کند که شی حاصل به درستی نامگذاری شده است و خوانایی ردیابی را بهبود می بخشد:
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__)
چرا از توابع لامبدا استفاده کنیم؟
بعد از آخرین پاراگراف، ممکن است تعجب کنید که چرا می خواهید از a استفاده کنید lambda
تابع. پس از همه، هر کاری که می توان با a انجام داد lambda
تابع را می توان با یک تابع نامگذاری شده انجام داد.
را
پاسخ به این است که lambda
کارکرد هدف این است که در داخل عبارات بزرگتر زندگی کنیم که یک محاسبات را نشان می دهد. یکی از راههای فکر کردن به این موضوع، قیاس با متغیرها و مقادیر است. کد زیر را در نظر بگیرید:
x = 2
متغیر x
جای جای (یا نام) برای عدد صحیح است 2
. مثلا تماس گرفتن print(x)
و print(2)
دقیقا همان خروجی را می دهد. در مورد توابع:
def square(x): return x**2
کارکرد square()
یک مکان نگهدار برای محاسبه مربع کردن یک عدد است. این محاسبات را می توان به صورت بی نام نوشت lambda x: x**2
.
را
در ادامه این انحراف فلسفی، بیایید چند نمونه از کاربردها را ببینیم lambda
کارکرد.
را
استفاده از Lambda با تابع sorted().
را sorted()
تابع یک تکرار شونده را مرتب می کند. تابعی را به عنوان خود می پذیرد key
آرگومان، و نتیجه تابع اعمال شده برای هر عنصر تکرارپذیر برای ترتیب دادن عناصر استفاده می شود.
را
این کاملا برای یک مناسب است lambda
تابع: با تنظیم key
پارامتر با a lambda
تابع، ما می توانیم بر اساس هر نوع ویژگی عناصر مرتب کنیم. به عنوان مثال، می توانیم لیستی از نام ها را بر اساس نام خانوادگی مرتب کنیم:
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 با تابع ‘filter()’
را filter()
تابع دارای نحو زیر است: filter(function, iterable)
و خروجی عناصر از iterable
که ارزیابی می کنند function(element)
به عنوان درست (شبیه یک است WHERE
بند در SQL). ما میتوانیم استفاده کنیم lambda
به عنوان پارامتر برای filter()
برای انتخاب عناصر از یک تکرار شونده
به مثال زیر توجه کنید:
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()
اعمال می کند lambda
تابع lambda x: (x % 3 == 0) and (x % 5 == 0)
به هر عنصر از range(0,100)
، و a را برمی گرداند filter
هدف – شی. ما با ریختن آن به عنوان به عناصر دسترسی پیدا می کنیم list
.
را
استفاده از Lambda با تابع نقشه ()
را
آخرین مثال ما چیزی است که در مقدمه دیده ایم – the map()
تابع. را map()
نحو تابع عبارت است از: map(function, iterable)
، و map()
اعمال میشود function
به هر عنصر از iterable
، بازگشت الف map
شیئی که با ریخته گری به a قابل دسترسی است list
.
ما دیدهایم که چگونه میتوان این را در لیستها اعمال کرد، اما میتوان آن را برای دیکتههایی با استفاده از آن اعمال کرد dict.items()
روش:
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
یا به یک رشته:
my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'
ما می توانیم استفاده کنیم map()
عملکرد به روش های مبتکرانه – یک مثال اعمال بسیاری از توابع برای یک ورودی است.
برای مثال، فرض کنید در حال ساخت یک API هستید که یک رشته متنی را دریافت می کند و می خواهید لیستی از توابع را روی آن اعمال کنید.
هر تابع برخی از ویژگی ها را از متن استخراج می کند. ویژگی هایی که می خواهیم استخراج کنیم عبارتند از تعداد کلمات، کلمه دوم و حرف چهارم کلمه چهارم:
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')
را
نتیجه
را
در این راهنما، ما عملکرد آن را بررسی کرده ایم lambda
توابع در پایتون ما آن را دیده ایم lambda
توابع توابع ناشناس هستند که به عنوان پارامتر تابع درون خطی برای سایر توابع استفاده می شوند. برخی موارد استفاده و همچنین زمان عدم استفاده از آنها را دیدهایم.
را
هنگام برنامه نویسی، مهم است که نقل قول دونالد کنوت را در نظر داشته باشید: “برنامه ها برای خواندن توسط انسان ها و فقط به صورت تصادفی برای کامپیوترها برای اجرا ساخته شده اند.” با داشتن این نکته در ذهن، lambda
توابع ابزار مفیدی برای ساده کردن کد ما هستند، اما باید عاقلانه استفاده شوند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-02 07:57:04