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