hody.ir

دوره صفر تا صد پایتون | آشنایی با توابع lambda و filter و map در پایتون و استفاده از آنها

33-آشنایی با lambda و filter و map در پایتون

جلسه ۳۳ دوره صفر تا صد پایتون

در جلسات قبلی دوره صفر تا صد پایتون با Context manager در پایتون آشنا شدیم. در این جلسه با توابع lambda و filter و map در پایتون و استفاده از آن آشنا می‌شویم.

توابع lambda

توابع lambda ماننده توابع عادی هستند اما در یک خط تعریف می‌شوند. همچنین روش تعریف شدن آنها نیز متفاوت است. استفاده از توابع lambda برای انجام یک کار ساده بدون تعریف یک تابع عادی، یکی از استفاده های این توابع است.

برای تعریف این توابع باید به این شکل ، تابع موردنظر را تعریف کرد:

function_name = lambda input1,input2 : input1 * input2

function_name اسم تابع است.

input1 و input2 ورودی ها هستند ( ورودی های بیشتر میتوانند را باید با , از هم جدا کرد )

و پس از : مقداری است که تابع به خروجی میفرستد. در این مثال ما input1 را در input2 ضرب می‌کنیم.

استفاده از این تابع شکل عادی ممکن است:

f = lambda x,y : x * y
print(f(10,20))

خروجی:

200

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

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

مثال مورد آخر:

def double_run(function,*list_options,**dict_options):
    for _ in range(2):
        yield function(*list_options,**dict_options)

for freturn in double_run(lambda x,y : x * y,20,20):
    print(freturn)

خروجی :

400
400

در اینجا ما تابع lambda مورد نظر را به generator تعریف شده ما به اسم double_run دادیم. در واقع این یکی از روش های استفاده از دکوراتور ها ( با دکوراتور ها در جلسات قبلی دوره صفر تا صد پایتون آشنا شدیم ) در توابع lambda است.

درضمن توابع lambda از کلاس function هستند.

تابع map

این تابع برای ورودی یک تابع دریافت می‌کند و برای ورودی دوم یک iterator ( در جلسات قبلی دوره صفر تا صد پایتون با iterator آشنا شدیم ).

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

با هر عضو iterator داده شده ، تابع ورودی را اجرا می‌کند و در آخر خروجی تابع را در یک map object ذخیره می‌کند. این map object میتواند به لیست و تاپل تبدیل شود.

مثال:

اگر تابع ورودی ما این باشد:

lambda x : 'even' if x % 2 == 0 else 'odd'

و ورودی iterator ما این باشد‌:

(1,2,3,4,5,6,7,8,9)

خروجی ما این است ( با استفاده از تابع tuple) :

('odd','even','odd','even','odd','even','odd','even','odd')

حالا که با روش کار این تابع آشنا شدیم می توانیم با آن کار کنیم:

x = map(lambda x : 'even' if x % 2 == 0 else 'odd',(1,2,3,4,5,6,7,8,9))
print(tuple(x))

خروجی:

('odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd')

دقت کنید که تابع ورودی میتواند هر چیزی را به عنوان خروجی بدهد.

تابع filter

این تابع ماننده تابع map است اما بجای قرار دادن خروجی تابع ، اگر خروجی تابع برای عضو iterator برابر با True باشد ، آن عضو را در آبجکت filter قرار می دهد ، در غیر این صورت عضو iterator در آبجکت filter قرار نمی‌گیرد.

ورودی های تابع filter دقیقا به شکل تابع map هستند.

مثال از استفاده از تابع filter:

x = filter(lambda x : True if x % 2 == 0 else False,(1,2,3,4,5,6,7,8,9))
print(tuple(x))

خروجی:

(2, 4, 6, 8)

دقت کنید که مقدار خروجی تابع یا True باشد یا False.

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

0 0 vote
Article Rating
Subscribe
اطلاع از
guest
1 دیدگاه
قدیمی ترین
جدیدترین بیشترین آرا
Inline Feedbacks
View all comments
trackback

[…] جلسه قبلی دوره صفر تا صد پایتون با توابع lambda و filter و map آشنا شدیم. در این جلسه با کار با کتابخانه ها در پایتون […]