عمومی

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

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

این مقاله توابع لامبدا پایتون و نحوه نوشتن و استفاده از آنها را معرفی می‌کند.

اگرچه پایتون یک زبان برنامه نویسی شی گرا است، اما توابع لامبدا زمانی مفید هستند که انواع مختلفی از برنامه نویسی تابعی را انجام می دهید. توجه: این مقاله فرض می‌کند که برنامه‌نویسی پایتون و نحوه استفاده از یک تابع معمولی را درک کرده‌اید. همچنین فرض بر این است که پایتون 3.8 یا بالاتر را روی دستگاه خود نصب کرده اید.

معرفی سایت: 6 وب سایت برای الهام گرفتن از طراحی برند

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

در پایتون، توابع می‌توانند یک یا چند آرگومان موقعیتی یا کلیدواژه، یک لیست متغیر از آرگومان‌ها، یک فهرست متغیر از آرگومان‌های کلیدواژه و غیره را وارد کنند. آنها را می توان به یک تابع مرتبه بالاتر منتقل کرد و به عنوان خروجی برگرداند. توابع منظم می توانند چندین عبارت و چند عبارت داشته باشند. آنها همچنین همیشه یک نام دارند.

یک تابع لامبدا پایتون به سادگی یک تابع ناشناس است. همچنین می توان آن را تابع بی نام نامید. توابع عادی پایتون با کلمه کلیدی def تعریف می شوند. توابع Lambda در پایتون معمولاً از کلمه کلیدی lambda، هر تعداد آرگومان و یک عبارت تشکیل شده‌اند.

توجه: بسته به زبان برنامه‌نویسی می‌توان از عبارت‌های توابع لامبدا، عبارات لامبدا و شکل‌های لامبدا به جای یکدیگر استفاده کرد. یا برنامه نویس.

توابع لامبدا بیشتر به عنوان یک لاینر استفاده می شوند. آنها اغلب در توابع درجه بالاتر مانند map() و filter() استفاده می شوند. این به این دلیل است که توابع ناشناس به عنوان آرگومان به توابع درجه بالاتر ارسال می شوند، که فقط در برنامه نویسی پایتون انجام نمی شود.

یک تابع لامبدا همچنین برای مدیریت درک لیست در پایتون بسیار مفید است — با گزینه‌های مختلف برای استفاده از عبارات لامبدا پایتون برای این منظور.

لمبداها وقتی برای رنینگ شرطی در چارچوب‌های رابط کاربری مانند Tkinter استفاده می‌شوند، عالی هستند، wxPython، Kivy، و غیره. اگرچه عملکرد چارچوب‌های رابط کاربری گرافیکی پایتون در این مقاله پوشش داده نشده است، برخی از کدها استفاده شدید از توابع لامبدا را برای ارائه رابط کاربری بر اساس تعامل کاربر نشان می‌دهند.

چیزهایی که قبل از پرداختن به توابع لامبدا پایتون باید فهمید

از آنجایی که پایتون یک زبان برنامه نویسی شی گرا است، همه چیز یک شی است. کلاس‌های پایتون، نمونه‌های کلاس، ماژول‌ها و توابع همگی به‌عنوان آبجکت مدیریت می‌شوند.

یک شی تابع را می توان به یک متغیر اختصاص داد.

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

دف سلام(name):
    بازگشت f'Hello  {name}'

سلام = سلام
با سلام('Clint')
>>>>
سلام کلینت

توابع مرتبه بالاتر مانند map()، filter()، و reduce()

احتمالاً باید از یک تابع لامبدا در توابع داخلی مانند filter() و map() و همچنین با reduce استفاده کنید. () – که از ماژول functools در پایتون وارد شده است، زیرا یک تابع داخلی نیست. به طور پیش فرض، توابع مرتبه بالاتر توابعی هستند که توابع دیگری را به عنوان آرگومان دریافت می کنند.

همانطور که در مثال‌های کد زیر مشاهده می‌شود، توابع عادی را می‌توان با لامبدا جایگزین کرد که به عنوان آرگومان به هر یک از این توابع مرتبه بالاتر منتقل می‌شوند:


نام‌ها = ['Clint'، 'Lisa'، 'Asake '، 'Ada']

greet_all = لیست(نقشه(greet، names))
چاپ(greet_all)
>>>>
['سلام کلینت'، 'Hello Lisa'، 'Hello Asake'، "سلام آدا"]

اعداد = [11، 12، 13، 14،  15، 16، 17، 18، 19، 20]
def چندین_از_سه(x):
        بازگشت x % 3 == 

چاپ(لیست(فیلتر(چندین_از_سه، اعداد )))
>>>>
[12، 15، 18]

اعداد = [1، 2، 3، 4،  5، 6، 7، 8، 9، 10]
def add_numbers(x، y):
        بازگشت x * y

چاپ(کاهش(add_numbers، اعداد))
>>>>
55

تفاوت بین یک عبارت و یک عبارت

یک نقطه سردرگمی مشترک در میان توسعه دهندگان، تمایز بین یک عبارت و یک عبارت در برنامه نویسی است.

یک گزاره هر قطعه کدی است که کاری انجام می‌دهد یا عملی را انجام می‌دهد – مانند شرایط if یا while.

یک عبارت از ترکیبی از متغیرها، مقادیر و عملگرها ساخته می‌شود و به یک مقدار جدید ارزیابی می‌شود.

این تمایز با بررسی موضوع توابع لامبدا در پایتون مهم است. عبارتی مانند شکل زیر مقداری را برمی گرداند:

square_of_three = 3 ** 2
چاپ(square_of_three)
>>>>
9

یک عبارت به این شکل است:

برای و در محدوده(لن (اعداد)، ، -1) :
        اگر i % 2 == 1:
                چاپ(i)
        دیگر:
                چاپ("حتی")
>>>>
حتی 9 حتی 7 حتی 5 حتی 3 حتی 1

نحوه استفاده از توابع Python Lambda

راهنمای سبک پایتون تصریح می‌کند که هر تابع لامبدا باید با کلمه کلیدی lambda شروع شود (برخلاف توابع معمولی که با کلمه کلیدی def شروع می‌شوند). سینتکس یک تابع لامبدا به طور کلی به این صورت است:

lambda آرگومان‌های : عبارت 

توابع لامبدا می توانند هر تعداد آرگومان موقعیتی، آرگومان کلیدواژه یا هر دو را به همراه یک دونقطه و تنها یک عبارت داشته باشند. نمی تواند بیش از یک عبارت وجود داشته باشد، زیرا از نظر نحوی محدود شده است. بیایید نمونه ای از عبارت لامبدا را در زیر بررسی کنیم:

add_number = لامبدا x ، y : x + y
چاپ(add_number(10، 4))
>>>>
14

از مثال بالا، عبارت lambda به متغیر add_number اختصاص داده شده است. فراخوانی تابع با ارسال آرگومان هایی انجام می شود که به 14 ارزیابی می شود.

نوشته دیگر :   دستگاه کش لس - خودپرداز غیرنقدی

اجازه دهید مثال دیگری را در زیر بیاوریم:

قیمت

قیمت_تخفیف شده = لامبدا ، تخفیف = 0.1، vat = 0.02 : قیمت * (1 - تخفیف) * ( 1 + vat)

چاپ(discounted_price(1000، vat=0.04 ، تخفیف=0.3))
>>>>
728.0

همانطور که در بالا مشاهده شد، تابع لامبدا به 728.0 ارزیابی می شود. ترکیبی از آرگومان های موقعیتی و کلیدواژه در تابع لامبدا پایتون استفاده می شود. در حالی که از آرگومان های موقعیتی استفاده می کنیم، نمی توانیم ترتیب مشخص شده در تعریف تابع را تغییر دهیم. با این حال، می‌توانیم آرگومان‌های کلیدواژه را در هر موقعیتی فقط بعد از آرگومان‌های موقعیتی قرار دهیم.

توابع لامبدا همیشه درست مانند عبارات تابع بلافاصله فراخوانی شده (IIFE) اجرا می شوند. در جاوا اسکریپت این بیشتر با مفسر پایتون استفاده می شود، همانطور که در مثال زیر نشان داده شده است:

چاپ((لامبدا x، y: x - y)( 45، 18))
>>>>
27

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

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

لیست_my = [(لامبدا x: x * 2)(x ) برای x در  محدوده(10) اگر x % 2 == ]
چاپ(my_list)
>>>>
[، 4، 8، 12، 16] 
مقدار = [(لامبدا x: x % 2 و «فرد» یا «حتی»)(x) برای x در my_list]
چاپ(value)
>>>>
[«حتی»، "حتی"، "حتی"،  "حتی"، "حتی" ]

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

test_condition1 = لامبدا x : x / 5 اگر x > 10 دیگر x + 5
چاپ(test_condition1(9))
>>>>
14
test_condition2 = لامبدا x : f'{x} زوج است' اگر x % 2 ==  دیگر (لامبدا x: f'{x} فرد است')(x)

چاپ(test_condition2(9))
>>>>
9 ش فرد است

توابع لامبدا در توابع مرتبه بالاتر

مفهوم توابع مرتبه بالاتر در پایتون نیز مانند سایر زبان ها رایج است. آنها توابعی هستند که توابع دیگر را به عنوان آرگومان می پذیرند و همچنین توابع را به عنوان خروجی برمی گردانند.

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

در اینجا چند نمونه از یک تابع لامبدا استفاده شده با تابع map() آورده شده است:

square_of_numbers = لیست(نقشه( lambda x: x ** 2 ، محدوده(10)))

چاپ(square_of_numbers)
>>>>
[، 1، 4، 9، 16،  25، 36، 49، 64، 81] پیش>
رشته‌ها = ["نیجریه"، "غنا"، 'نیجر'، 'کنیا '، 'اتیوپی'، "آفریقای جنوبی"، "تانزانیا"، "مصر"، ' مراکش، "اوگاندا"]

length_of_strings = لیست(نقشه(لامبدا x: لن(x)، strings))

چاپ(length_of_strings)
>>>>
[7، 5، 5، 5، 8،  12، 8، 5، 7، 6] پیش>

در اینجا برخی از توابع لامبدا استفاده شده با تابع filter() آورده شده است:

length_of_strings_above_five = لیست(فیلتر( لامبدا x: لن(x) > 5 , strings))

چاپ(length_of_strings_above_five)
>>>>
["نیجریه"، "اتیوپی"، "آفریقای جنوبی" ، "تانزانیا"، "مراکش"، "اوگاندا"]
fruits_numbers_alphanumerics = ['apple'، '123'، 'python3'، '4567 '، 'انبه'، 'نارنجی'، 'web3'، 'موز'، '890 ']

میوه ها = لیست( فیلتر(لامبدا x: x.isalpha()، fruits_numbers_alphanumerics))

اعداد = لیست( فیلتر(لامبدا x: x.isnumeric()، fruits_numbers_alphanumerics))

چاپ(میوه‌ها)
چاپ(اعداد)
>>>>
['apple'، 'انبه'، 'نارنجی'،  'banana']
['123', '4567', '890']

Here are some lambda functions used with the reduce() function:

values = [13, 6, 12, 23, 15, 31, 16, 21]
max_value = reduce(lambda x,y: x if (x > y) else y, values)
print(max_value)
>>>>
31
nums = [1, 2, 3, 4, 5, 6]
multiplication_of_nums = reduce(lambda x,y: x*y, nums)

print(multiplication_of_nums)
>>>>
720

منبع: https://thermowoods.ir/6-وب-سایت-برای-الهام-گرفتن-از-طراحی-برند/