وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

توابع لامبدا در پایتون

0 19
زمان لازم برای مطالعه: 4 دقیقه


توابع لامبدا چیست؟

را
در پایتون، توابع اشیاء هستند: آنها را می توان به متغیرها نسبت داد، می توان آنها را از توابع دیگر برگرداند، در لیست ها یا دیکت ها ذخیره کرد و به عنوان پارامتر برای توابع دیگر ارسال کرد. به عنوان مثال، را در نظر بگیرید 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**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__)

چرا از توابع لامبدا استفاده کنیم؟

بعد از آخرین پاراگراف، ممکن است تعجب کنید که چرا می خواهید از 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید