تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

    آموزش استفاده از توابع Lambda، Map و Filter در Python

    آموزش استفاده از توابع lambda، map و filter در python

    یادگیری چگونگی استفاده از توابع Lambda، Map و Filter با توجه به کاربردهای بسیار زیاد آن‌ها در برنامه‌های Python از اهمیت بالایی برخوردار است. به‌همین منظور ما در این مقاله تصمیم داریم نحوه‌ی استفاده از این توابع را به‌همراه مثال به شما آموزش دهیم.

    تابع Lambda

    از Lambda برای ایجاد توابع Anonymous در زبان Python استفاده می‌شود و سینتکس آن به شکل زیر است:

    lambda arguments : expression

    همان‌طور که مشاهده می‌کنید، یک تابع Lambda می‌تواند تعداد زیادی آرگومان را به‌‌عنوان ورودی دریافت کند اما باید توجه داشته باشید که فقط یک Expression را می‌توان بر روی آرگومان‌های ورودی اجرا کرد.

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

    قبل از پرداختن به نحوه‌ی استفاده از تابع Lambda بیایید به تابع زیر که عملیات جمع دو آرگومان را برای ما انجام می‌دهد، نگاهی بیندازیم:

     def add(x, y): 
        return x + y
    
    # Call the function
    add(2, 3)  # Output: 5

    تابع فوق دو آرگومان x و y را دریافت کرده و درنهایت جمع آن‌ها را return می‌کند. حال بیایید ببینیم چگونه می‌توان تابع فوق را به یک تابع Lambda تبدیل کرد:

    add = lambda x, y : x + y 
    
    print(add(2, 3)) # Output: 5

    lambda x, y: x + y یک function object را return می‌کند بنابراین باید آن را به یک متغیر انتساب داده و در مرحله‌ی بعد می‌توان از آن متغیر مانند یک تابع عادی در زبان Python استفاده کرد. همچنین با بررسی نوع آن متغیر می‌توانید متوجه شوید که به یک تابع تبدیل شده است:

    type(add) # Output: <class 'function'>

    تابع Map

    تابع Map با سینتکس زیر:

    map(function_object, iterable1, iterable2,...)

    یک function object را به‌عنوان آرگومان اول دریافت کرده و آن را بر روی تمام مقادیر توالی‌های قابل پیمایشی که در آرگومان‌های بعدی دریافت کرده است، اجرا می‌کند.

    نحوه‌ی استفاده از تابع Map در زبان Python

    def multiply2(x):
      return x * 2
    
    map(multiply2, [1, 2, 3, 4])  # Output [2, 4, 6, 8]

    در مثال فوق یک تابع با نام multiply2 وجود دارد که ما از آن به‌عنوان function object استفاده می‌کنیم. این تابع یک آرگومان با نام x را دریافت و مقدار دریافتی را در عدد ۲ ضرب می‌کند. حال در این مثال، لیست [1, 2, 3, 4] به‌عنوان توالی قابل پیمایش در آرگومان دوم تابع Map وارد شده که درنهایت function object بر روی تک تک مقادیر لیست وارد شده اجرا می‌شود.

    حال با استفاده از مطالب بخش قبل می‌توانیم کدهای فوق را با استفاده از تابع Map و Lambda بازنویسی کنیم تا درنهایت کدهای کوتاه‌تر و تمیزتری داشته باشیم:

    map(lambda x : x*2, [1, 2, 3, 4]) #Output [2, 4, 6, 8]

    پیمایش دیکشنری‌ها با استفاده از توابع Map و Lambda در زبان Python

    dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

    در این بخش دو دیکشنری در لیستی با نام dict_a وجود دارد و ما قصد داریم با استفاده از چند تابع Lambda برخی Expressionهای ساده را بر روی مقادیر هر دیکشنری اجرا کنیم:

    dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
    
    map(lambda x : x['name'], dict_a) # Output: ['python', 'java']
    
    map(lambda x : x['points']*10,  dict_a) # Output: [100, 80]
    
    map(lambda x : x['name'] == "python", dict_a) # Output: [True, False]

    پیمایش چندین توالی با استفاده از تابع Map در زبان Python

    تابع Map می‌تواند یک Expression را بر روی چندین توالی قابل پیمایش اجرا کند:

    list_a = [1, 2, 3]
    list_b = [10, 20, 30]
    
    map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]

    list_a و list_b در مثال فوق به‌عنوان دو توالی مختلف در آرگومان‌های دوم و سوم تابع Map وارد شده‌اند و آرگومان اول تابع Map که همان function object ما است، دو آرگومان x و y دریافت کرده و درنهایت جمع این دو مقدار return می‌کند. حال با نگاهی به خروجی نهایی تابع Map که لیستی با مقادیر [11, 22, 33] است، می‌توانیم متوجه شویم که مقادیر list_a به‌عنوان آرگومان x و مقادیر list_b به‌عنوان آرگومان y به تابع Lambda پاس داده شده است.

    البته موضوعی وجود دارد که باید به آن بپردازیم. تابع Map در Python 3 یک map object را return می‌کند و به همین دلیل نمی‌توانیم به‌طور مستقیم به خروجی آن دسترسی داشته باشیم:

    map_output = map(lambda x: x*2, [1, 2, 3, 4])
    print(map_output) # Output: map object: <map object at 0x04D6BAB0>

    بنابراین برای دسترسی به خروجی‌های map_output باید آن را به یک لیست تبدیل کنیم:

    map_output = map(lambda x: x*2, [1, 2, 3, 4])
    print(map_output) # Output: map object: <map object at 0x04D6BAB0>
    
    list_map_output = list(map_output)
    
    print(list_map_output) # Output: [2, 4, 6, 8]

    تابع Filter

    با استفاده از تابع Filter می‌توانیم مقادیر مورد نظر خود را از یک توالی قابل پیمایش فیلتر کنیم. حال سینتکس این تابع به شکل زیر است و به‌طور کلی دو آرگومان دریافت می‌کند:

    filter(function_object, iterable)

    اولین آرگومان یک function object است که بر روی مقادیر آرگومان دوم که یک توالی است، اجرا خواهد شد و خروجی نهایی باید یک مقدار boolean باشد. اگر نتیجه‌ی اجرای Expression تعریف شده در function object بر روی هر کدام از مقادیر توالی قابل پیمایش برابر با True باشد، آن مقدار در لیست نهایی return می‌شود.

    تفاوت تابع Filter با تابع Map در این است که شما می‌توانید چندین توالی قابل پیمایش را به تابع Map پاس دهید اما در تابع Filter فقط می‌توانید یک توالی را وارد کنید.

    نحوه‌ی استفاده از تابع Filter در زبان Python

    بیایید عددهای زوج را از میان لیست [1, 2, 3, 4, 5, 6] فیلتر کنیم:

    a = [1, 2, 3, 4, 5, 6]
    filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]

    همچنین شما می‌توانید مقادیر مورد نظر خود را از میان مقادیر موجود در یک دیکشنری به شکل زیر فیلتر کنید:

    dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
    
    filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]

    تابع Filter مانند تابع Map، یک object function را return می‌کند که برای دسترسی به خروجی آن باید به‌صورت زیر عمل کرد:

    list_a = [1, 2, 3, 4, 5]
    
    filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object <filter at 0x4e45890>
    
    even_num = list(filter_obj) # Converts the filer obj to a list
    
    print(even_num) # Output: [2, 4]

    منبع: https://betterprogramming.pub/lambda-map-and-filter-in-python-4935f248593

    برچسب‌ها:

    ســــــــــــــــــــــال‌هاست که هستیم

    ۶ سال در کنار شما تجربه جمع کردیم. تازه در ابتدای مسیر هستیم، مسیر ساخت آینده.

    جمع‌مـــــــــــان، جمع است

    بیش از ۴۰ هزار توسعه‌دهنده و صاحبان کسب و کار در جمع ما هستند. جای شما خالی‌ست...

    خدمات رایگان لیارا

    ۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

    ۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

    هاست رایگان برای دیتابیس‌

    دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

    سرویس DNS رایگان

    به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

    ۱۰۰ هزار تومان اعتبار اولیه

    بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

    ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

    در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید. (به‌همراه دسترسی SMTP)

    هاست رایگان برای انواع وبسایت

    تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

    همراه شما هستیم

    در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
    تلفن واحد فروش:
    ۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
    تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)