functools
functools
là một module chuẩn trong Python, cung cấp các công cụ giúp thao tác và cải tiến hàm – như lưu cache kết quả, tạo decorator, hay cố định đối số cho hàm.
Nói đơn giản:
functools
giúp bạn viết code ngắn gọn hơn, tối ưu hơn và linh hoạt hơn khi xử lý hàm.
Một số hàm nổi bật trong functools
@lru_cache
– Ghi nhớ kết quả hàm (caching)
from functools import lru_cache
@lru_cache(maxsize=100)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(35)) # Rất nhanh nhờ cache
Tăng tốc đáng kể cho các hàm đệ quy hoặc tính toán nặng lặp lại nhiều lần.
partial()
– Gán sẵn một số đối số cho hàm
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(4)) # 16
Tạo các hàm "rút gọn" rất tiện khi dùng với map
, filter
, GUI callback,...
wraps()
– Bảo toàn metadata khi viết decorator
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Before function")
return func(*args, **kwargs)
return wrapper
@my_decorator
def greet():
"""This is a greeting function"""
print("Hello!")
print(greet.__name__) # 👉 greet (không bị đổi thành 'wrapper')
print(greet.__doc__) # 👉 This is a greeting function
Giữ lại tên hàm, docstring,... khi bạn tạo custom decorators.
reduce()
– Áp dụng hàm tích lũy lên phần tử của list
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product) # 👉 24
Dùng cho các phép cộng dồn, nhân dồn,... giống fold
trong functional programming.
Khi nào nên dùng functools
Tình huống | Dùng gì từ functools |
---|---|
Cần cache hàm đệ quy hoặc gọi lặp | @lru_cache |
Tạo decorator tùy chỉnh | @wraps |
Cần tạo hàm mới từ hàm cũ, rút gọn tham số | partial() |
Muốn tính toán tích lũy trên list | reduce() |
Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft
Không có bình luận