تابع Lambda در پایتون — همراه با مثال + کد

عکس شاخص تابع Lambda در پایتون

تابع Lambda در پایتون یک نوع تابع ناشناس «Anonymous function» است که برای ایجاد توابع ساده و کوتاه به کار می‌رود. این توابع معمولاً برای انجام عملیات‌های ساده یا عبوری در کدهایی که نیاز به یک تابع موقت دارند، استفاده می‌شوند. ساختار توابع lambda برخلاف توابع معمولی که از کلمه‌کلیدی def برای تعریف استفاده می‌کنند، ساده‌تر است و به صورت یک عبارت «expression» تعریف می‌شود. این توابع معمولاً در مواقعی که نیاز به یک تابع کوچک و یک‌خطی داریم، مانند هنگام استفاده از توابعی مانند ()map() filter, یا ()sorted, بسیار مفید هستند.

مقدمه

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

در یادگیری زبان پایتون، درک درست مفاهیم برنامه نویسی امری ضروری است. در همین موضوع در زبان برنامه نویسی پایتون توابعی وجود دارند که در اصطلاح به آن‌ها توابع ناشناس می‌گویند به همین دلیل در این مقاله به توضیح و تشریح تابع Lambda در پایتون به همراه مثال و کد خواهیم پرداخت. تابع Lambda در پایتون جزو توابع ناشناس «Anonymous» هستند، به این معنی که این توابع بدون نام هستند. برای تعریف یک تابع معمولی در پایتون از کلیدواژه def استفاده می‌شود. به همین صورت، برای تعریف یک تابع ناشناس از کلیدواژه lambda استفاده می‌شود.

در این مثال، یک تابع Lambda به نام upper تعریف کرده‌ایم تا با استفاده از متد ()upper یک رشته را به حروف بزرگ تبدیل کند.

s1 = 'ProgramStore'

s2 = lambda func: func.upper()
print(s2(s1))

خروجی:

PROGRAMSTORE

این تکه کد یک تابع Lambda در پایتون به نام upper تعریف می‌کند که یک رشته را به‌عنوان آرگومان می‌پذیرد و آن را با استفاده از متد ()upper به حروف بزرگ تبدیل می‌کند. سپس این تابع Lambda روی رشته‌ی «ProgramStore» اعمال شده و نتیجه چاپ می‌شود.

بیایید تابع Lambda را دقیق‌تر بررسی کنیم:

سینتکس تابع Lambda در پایتون

  • lambda: کلیدواژه‌ای برای تعریف یک تابع.
  • آرگومان‌ها: لیستی از پارامترهای ورودی که با کاما از هم جدا می‌شوند (مشابه توابع معمولی).
  • عبارت: یک عبارت منفرد که ارزیابی شده و به‌عنوان خروجی بازگردانده می‌شود.

بیایید چند کاربرد عملی از تابع Lambda در پایتون را بررسی کنیم.

تصویری از چگونگی کارکرد تابع lambda در پایتون

تابع Lambda با شرط‌گذاری در پایتون

یک تابع Lambda در پایتون می‌تواند با استفاده از دستورهای if شامل شرط باشد. این کار به شما امکان می‌دهد تا عملیات شرطی ساده را در یک خط کد انجام دهید.

# Example: Check if a number is positive, negative, or zero
n = lambda x: "Positive" if x > 0 else "Negative" if x < 0 else "Zero"

print(n(5))   
print(n(-3))  
print(n(0))

خروجی:

Positiv
Negativ
Null
  • تابع Lambda در پایتون از x به‌عنوان ورودی استفاده می‌کند.
  • از شرط‌های تو در تو (if-else) استفاده می‌کند تا «مثبت»، «منفی» یا «صفر» را برگرداند.

تفاوت بین تابع Lambda و def در چیست؟

Lambda مختصر است اما در پردازش منطق‌های پیچیده به‌اندازه def قدرتمند نیست.

عملگر عادی (def) تابع لامبدا ویژگی خاص
چندین خط کد عبارت واحد با لامبدا تعریف
باید اسم داشته باشد ناشناس (یا با نام در صورت اختصاص) نام
ممکن است حاوی چندین دستورالعمل باشد فقط بیان واحد نظرات
ممکن است حاوی رشته های مستند باشد نمی‌تواند مدرکی وجود داشته باشد مستندات
برای مناطق قابل استفاده مجدد و پیچیده بهتر است. بهترین برای عملکردهای کوتاه و موقت قابلیت استفاده مجدد
# Using lambda
sq = lambda x: x ** 2
print(sq(3))

# Using def
def sqdef(x):
    return x ** 2
print(sqdef(3))

خروجی:

۹
۹

همان‌طور که در مثال بالا می‌بینیم، هر دو تابع ()sq و ()sqdef به‌درستی و مشابه یکدیگر عمل می‌کنند.

تابع Lambda با List Comprehension

ترکیب Lambda با List Comprehension به ما امکان می‌دهد تا تغییرات روی داده‌ها را به شکلی مختصر اعمال کنیم. به مثال زیر توجه کنید:

li = [lambda arg=x: arg * 10 for x in range(1, 5)]
for i in li:
    print(i())

خروجی:

۱۰
۲۰
۳۰
۴۰

تابع Lambda هر عنصر را به توان دو می‌رساند.

  • List Comprehension روی لیست li تکرار می‌کند و Lambda را روی هر عنصر اعمال می‌کند.
  • این روش برای اعمال تغییرات روی مجموعه داده‌ها در وظایف پیش‌پردازش یا دستکاری داده‌ها ایده‌آل است.

تابع Lambda با if-else در پایتون

توابع Lambda می‌توانند منطق شرطی را مستقیماً در خود جای دهند و امکان تصمیم‌گیری‌های ساده را درون تابع فراهم کنند.

# Example: Check if a number is even or odd
check = lambda x: "Even" if x % 2 == 0 else "Odd"

print(check(4))  
print(check(7))

خروجی:

Even
Odd

تابع Lambda بررسی می‌کند که آیا عدد بر ۲ تقسیم‌پذیر است (x % 2 == 0).

  • اگر درست باشد، «Even» و در غیر این صورت «Odd» را برمی‌گرداند.
  • این روش برای برچسب‌گذاری یا دسته‌بندی مقادیر بر اساس شرایط ساده مفید است.

تابع Lambda با چند دستور در پایتون

توابع Lambda اجازه‌ی استفاده از چند دستور را نمی‌دهند، اما می‌توانیم دو تابع Lambda بسازیم و سپس تابع Lambda دوم را به‌عنوان پارامتر به تابع اول ارسال کنیم.

# Example: Perform addition and multiplication in a single line
calc = lambda x, y: (x + y, x * y)

res = calc(3, 4)
print(res)

خروجی:

(۷, ۱۲)
  • تابع Lambda هم جمع و هم ضرب را انجام داده و یک tuple شامل هر دو نتیجه بازمی‌گرداند.
  • این روش برای موقعیت‌هایی که نیاز به انجام محاسبات متعدد و بازگرداندن نتایج به‌صورت هم‌زمان است، مفید است.

استفاده از تابع Lambda با ()filter در پایتون

تابع ()filter در پایتون یک تابع و یک لیست را به‌عنوان آرگومان می‌پذیرد. این تابع روشی زیبا برای فیلتر کردن تمام عناصر یک توالی است که برای آن‌ها تابع مقدار True بازمی‌گرداند.

# Example: Filter even numbers from a list
n = [1, 2, 3, 4, 5, 6]
even = filter(lambda x: x % 2 == 0, n)
print(list(even))

خروجی:

[۲, ۴, ۶]

تابع Lambda بررسی می‌کند که آیا یک عدد زوج است (x % 2 == 0).
تابع ()filter این شرط را روی هر عنصر در لیست nums اعمال می‌کند.

استفاده از تابع Lambda با ()map در پایتون

تابع ()map در پایتون یک تابع و یک لیست را به‌عنوان آرگومان می‌پذیرد. این تابع با استفاده از Lambda فراخوانی می‌شود و یک لیست جدید بازمی‌گرداند که شامل تمام آیتم‌های تغییر داده‌شده توسط Lambda برای هر عنصر است.

# Example: Double each number in a list
a = [1, 2, 3, 4]
b = map(lambda x: x * 2, a)
print(list(b))

خروجی:

[۲, ۴, ۶, ۸]
  • تابع Lambda هر عدد را دو برابر می‌کند.
  • ()map روی لیست a تکرار می‌کند و تغییرات را اعمال می‌کند.

استفاده از تابع Lambda با ()reduce در پایتون

تابع ()reduce در پایتون یک تابع و یک لیست را به‌عنوان آرگومان می‌پذیرد. این تابع با استفاده از Lambda فراخوانی شده و یک نتیجه‌ی کاهش‌یافته‌ی جدید بازمی‌گرداند. این عملیات به‌صورت تکراری روی زوج‌های عناصر در iterable انجام می‌شود. تابع ()reduce در ماژول functools قرار دارد.

from functools import reduce

# Example: Find the product of all numbers in a list
a = [1, 2, 3, 4]
b = reduce(lambda x, y: x * y, a)
print(b)

خروجی:

۲۴
  • تابع Lambda دو عدد را در هر مرحله ضرب می‌کند.
  • تابع reduce این عملیات را روی کل لیست اعمال می‌کند.

نتیجه گیری

در نتیجه، تابع Lambda در پایتون ابزار قدرتمندی برای نوشتن کدهای کوتاه و مؤثر هستند. این توابع به خصوص زمانی که نیاز به یک تابع موقت و ساده داریم، مانند پردازش‌های سریع درون توابع ()map(), filter(), یا ()sorted, بسیار مفید و کاربردی هستند. استفاده از lambda می‌تواند به کاهش حجم کد و افزایش خوانایی آن کمک کند، به شرطی که در مواقع مناسب و برای عملیات‌های ساده از آن‌ها استفاده شود. هرچند برای توابع پیچیده‌تر و با چندین دستور، استفاده از توابع معمولی با def گزینه بهتری است.


سوالات متداول


کاربرد تابع Lambda در پایتون چیست؟

تابع Lambda در پایتون روشی مختصر برای ایجاد توابع کوچک و ناشناس فراهم می‌کنند، بدون نیاز به تعریف رسمی تابع با استفاده از def. این توابع به‌ویژه در مواردی مفید هستند که به یک تابع کوچک به‌صورت موقت نیاز باشد یا تعریف تابع ساده بوده و بتوان آن را در یک خط بیان کرد.

تفاوت اصلی بین def و Lambda در پایتون چیست؟

سینتکس(تابع Lambda در پایتون با کلمه‌ی کلیدی lambda نوشته می‌شوند و شامل پارامترها و یک عبارت هستند، درحالی‌که توابع def دارای سربرگ کامل، بدنه و امکان استفاده از چندین دستور هستند.) بازگشت مقدار(توابع Lambda به‌طور ضمنی نتیجه‌ی ارزیابی عبارت را بازمی‌گردانند، درحالی‌که توابع def از دستور صریح return استفاده می‌کنند.) محدوده(تابع Lambda در پایتون محدود به یک عبارت هستند و نسبت به توابع `def` که می‌توانند چندین دستور و منطق پیچیده‌تری داشته باشند، محدودتر هستند.)

عملکرد تابع Lambda در پایتون چگونه است؟

عملکرد تابع Lambda در پایتون ایجاد توابع کوچک و ناشناس به‌صورت سریع است. این توابع معمولاً در شرایطی استفاده می‌شوند که تعریف یک تابع کامل با def غیرضروری باشد یا تابع فقط برای مدت کوتاهی نیاز باشد و نیازی به نام‌گذاری نداشته باشد.

زمان استفاده از Lambda

عملیات ساده (زمانی که نیاز به انجام محاسبات یا عملیات ساده باشد.) توابع ناشناس (هنگامی که به یک تابع به‌صورت موقت یا در یک محل خاص نیاز دارید و نمی‌خواهید با def یک تابع نام‌گذاری‌شده تعریف کنید.) برنامه‌نویسی تابعی (در مواقعی که از توابع به‌عنوان اشیای درجه‌اول استفاده می‌شود، مانند ()map()، filter یا ()sorted که یک تابع به‌عنوان آرگومان ارسال می‌شود.)

کلید Lambda در پایتون چیست؟

پارامتر key در پایتون، مانند توابع ()sorted یا ()max ، این امکان را می‌دهد که یک تابع برای مرتب‌سازی یا مقایسه سفارشی مشخص شود. تابع Lambda در پایتون معمولاً برای تعریف یک کلید استفاده می‌شوند که بر اساس آن مرتب‌سازی یا مقایسه انجام می‌شود.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 1 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks مجله پی استور w3schools dataquest

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
پایتون


پیمایش به بالا