آموزش فانکشن های map, filter, reduce در پایتون

May 2020

فانکشن های map, reduce, filter تقلیدی هستند از برنامه نویسی functional. هر سه این فانکشن های میتوانند با list comprehension یا حلقه ها جایگزین شوند اما رویکردی ظریف تر و کوتاه تر برای برخی از مشکلات ارائه می دهند.

فانکشن map میتواند داخل یک آبجکت iterable چرخیده و تمام آیتم های آن را به فانکشنی که وجود دارد ارسال کند. در مثال زیر با استفاده از متد map توانستیم تمام آیتم هایی که در لیست names وجود دارد را به فانکشن show ارسال کنیم. فانکشن map یک map object برمیگرداند و برای دیدن نتیجه باید از فانکشن list استفاده کنیم.

names = ['amir', 'kevin', 'jack', 'mark']

def show(name):
    print( f'Hello {name}' )

list( map(show, names) )

# Hello amir
# Hello kevin
# Hello jack
# Hello mark

فانکشن filter هم مانند map یک آبجکت iterable گرفته و آیتم های آنرا به فانکشن دیگری ارسال میکند. اما فقط آیتم هایی که مقدار True برگدانند را ذخیره میکند. در مثال پایین میبینید که فقط اعدادی که از 18 بالاتر هستند برگشت داده شده اند.

ages = [20, 32, 14, 17, 24]

def filter_ages(age):
    if age > 18:
        return True

print( list( filter(filter_ages, ages) ) )


# [20, 32, 24]

عملکرد فانکشن reduce کمی با دو متد قبلی فرق دارد. این فانکشن از ماژول functools ایمپورت شده و دو آیتم ابتدایی آبجکت iterable را گرفته و نتیجه را به ترتیب با آیتم های بعدی آن آبجکت استفاده میکند. در مثال پایین فانکشن reduce دو آیتم 2 و 5 را گرفته و به add ارسال میکند. نتیجه 7 که فانکشن add برگردانده را دوباره همراه  با 6 به فانکشن add ارسال میکند.

from functools import reduce

nums = [2, 5, 6]

def add(a, b):
    return a + b

print( reduce(add, nums) )

# 13

 

ارسال نظر

اگر قراره سوالی بپرسید که داخلش کد هست، بهتره از کدتون عکس بگیرید و به ایمیلی که پایین نوشتم بفرستید