تابع lambda و map

تابع lambda و map

به دوره آموزشی پایتون خوش آمدید. برای رفتن به اولین جلسه این دوره، اینجا کلیک کنید. جلسه قبل درمورد تابع در پایتون صحبت کردیم. به طور خلاصه تابع lambda نوعی تابع کوچک است که گاهی اوقات نیاز ما را در یک خط انجام میدهد. به طور خلاصه تر lambda نوعی تابع یک خطی میباشد.

برای مثال من نیاز به یک تابع دارم که دو عدد را گرفته و آن ها را با هم جمع کند. فرض کنیم اسم تابع sum و نام متغیر های ورودی a و b میباشد. برای استفاده از lambda ابتدا نام تابع را مینویسیم و بعد یک مساوی در مقابل آن قرار میدهیم. سپس از کلمه کلیدی lambda استفاده میکنیم و متغیر های ورودی را بعد از آن می آوریم. سپس یک علامت دو نقطه ( : ) میگذاریم تا بعد از آن دستور را بنویسیم:

sum = lambda a, b: a+b

این تابع مقدار a+b را return میکند.

حال با نوشتن همین یک خط کد میتوانیم تصور کنیم که یک تابع به نام sum نوشته ایم. پس از آن استفاده میکنیم:

print(sum(6, 4))
# ۱۰

حالا فرض کنیم میخواهیم یک تابع بنویسیم که یک لیست را بگیرد، تک تک اعضا را با ۷ جمع کند و یک لیست جدید را برگرداند. تا اینجا یاد گرفته ایم که به صورت زیر عمل کنیم:

def plus7(list):
    res = []
    for i in list:
        res.append(i+7)
    return res

به جای این میتوانیم از تابعی به نام map استفاده کنیم و حتی از lambda کمک بگیریم.

تابع map چگونه کار میکند؟

این تابع دو ورودی میپذیرد، اولی یک تابع دیگر است و دومی یک لیست یا یک مقدار قابل شمارش است. کاری که مپ انجام میدهد این است که هر کدام از اعضای درون لیست را به تابع داده شده پاس میدهد و نتیجه ها را در خود ذخیره میکند. در آخر میتوانیم نتیجه ها را به لیست تبدیل کنیم.

در ورودی اول مپ به جای یک تابع میتوانیم همان جا یک lambda را تعریف کنیم:

my_list = [3,4,5,6,1,0,9]
new_list = list(map(lambda i: i+7,my_list))
print(new_list)
# [۱۰, ۱۱, ۱۲, ۱۳, ۸, ۷, ۱۶]

در خط اول یک لیست دارم، در خط دوم از تابع مپ استفاده کردم که در اولین آرگومان یک lambda تعریف کرده ایم و در دومین آرگومان لیست بالا را با آن پاس داده ایم تا تک تک اعضا روی تابع lambda اجرا شوند. در آخر نتایج را به یک لیست تبدیل کردیم و آن را در متغیر new_list ذخیره کرده ایم.

در جلسه بعد درمورد درمورد تابع map و filter صحبت خواهیم کرد.

ارسال دیدگاه

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