Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách hàm Python trả về một hàm khác

Python hỗ trợ first-class functions: hàm có thể trả về function object.

Ví dụ: Function factory

def f2(c, d):
    return c, d

def f1(a, b):
    c = a + 1
    d = b + 2
    return lambda: f2(c, d)  # Trả về lambda function

result = f1(1, 2)
print(result)    #  at 0x...>
print(result())  # (2, 4)

Closure - Biến tự do (free variables)

def make_multiplier(n):
    def multiplier(x):
        return x * n  # n là free variable, bị "bắt" (captured)
    return multiplier

double = make_multiplier(2)
triple = make_multiplier(3)
print(double(5))  # 10
print(triple(5))  # 15

Ứng dụng thực tế

  • Decorators: Nhận function, trả về function wrapper.
  • Partial application: functools.partial.
  • Strategy pattern: Trả về algorithm function tùy config.
  • Callback factories: Tạo callback với context đã bind.
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(5))    # 125