Higher-Order Functions

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/12
  • تعداد بازدید: 21

توابع مرتبه بالا (Higher-Order Functions)

توابع مرتبه بالا توابعی هستند که یا یکی از ورودی‌هایشان تابع است یا خودشان یک تابع را برمی‌گردانند. این قابلیت باعث می‌شود برنامه‌نویسی تابعی بسیار منعطف‌تر و قدرتمندتر شود.

مثال ساده از تابع مرتبه بالا

def apply_twice(func, value):
    return func(func(value))

def add_three(x):
    return x + 3

result = apply_twice(add_three, 7)  # ابتدا 7 + 3 = 10، سپس 10 + 3 = 13
print(result)  # خروجی: 13

در این مثال، تابع apply_twice یک تابع و یک مقدار می‌گیرد، سپس تابع را دو بار روی مقدار اعمال می‌کند.

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

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

def decorator(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()

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

ترکیب با functools.partial

تابع partial از ماژول functools به ما اجازه می‌دهد که یک تابع جدید بسازیم که بخشی از آرگومان‌هایش از پیش تعیین شده‌اند. این هم یک مثال از توابع مرتبه بالا است.

from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
cube = partial(power, exponent=3)

print(square(5))  # خروجی: 25
print(cube(4))    # خروجی: 64

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

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

def curry(func):
    def curried_func(x):
        def inner(y):
            return func(x, y)
        return inner
    return curried_func

@curry
def multiply(x, y):
    return x * y

double = multiply(2)
print(double(5))  # خروجی: 10

در این مثال، تابع multiply با currying تبدیل به تابعی شد که ابتدا یک ورودی می‌گیرد و سپس تابعی جدید می‌دهد که ورودی دوم را می‌پذیرد.

جمع‌بندی

توابع مرتبه بالا ابزار اصلی برنامه‌نویسی تابعی در پایتون هستند. با ترکیب آن‌ها با دکوریتورها، partial و currying می‌توانید کدهای بسیار انعطاف‌پذیر و خوانا بنویسید.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.