Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Thư viện functools trong Python
Thư viện functools trong Python là một công cụ mạnh mẽ chứa các hàm bậc cao giúp lập trình viên xử lý và thao tác với các hàm một cách linh hoạt hơn. Thư viện này cung cấp nhiều tính năng tiện ích như lưu trữ bộ nhớ đệm (caching), thực hiện các phép toán tích lũy, và tạo các hàm một phần (partial functions).

Các hàm bậc cao trong Python
Hàm là một đoạn mã thực hiện xử lý dựa trên các tham số đầu vào và trả về kết quả sau khi xử lý. Khi một hàm nhận một hàm khác làm tham số hoặc trả về một hàm làm kết quả, nó được gọi là hàm bậc cao. Một số hàm bậc cao phổ biến như map(), reduce(), và filter().
Ví dụ về một hàm bậc cao tùy chỉnh:
def create_function(aggregation: str):
    if aggregation == "sum":
        return sum
    elif aggregation == "mean":
        def mean(arr: list):
            return sum(arr) / len(arr)
        return mean
    return None
Thư viện functools trong Python
Các hàm chính trong thư viện functools bao gồm:
Bài viết này được đăng tại [free tuts .net]
reduce: Hàm này nhận một hàm và một iterable làm tham số. Nó thực hiện tính toán tích lũy trên các phần tử trong iterable, trả về giá trị cuối cùng.
from functools import reduce print(reduce(lambda x, y: x + y, [1, 2, 3])) # Kết quả: 6
partial: Hàm partial giúp tạo ra một hàm mới với một số tham số đã được cố định giá trị.
from functools import partial
def target_func(arg_one, arg_two):
    print(f"arg_one = {arg_one}, arg_two = {arg_two}")
partial_one = partial(target_func, arg_two="World!")
partial_one(arg_one="Hello")  # Kết quả: arg_one = Hello, arg_two = World!
@cache: Decorator cache lưu trữ các kết quả của hàm dựa trên tham số đầu vào nhằm tăng tốc độ xử lý cho các lần gọi lại sau này. cache có sẵn từ Python 3.9 và không giới hạn dung lượng lưu trữ bộ nhớ đệm.
from functools import cache
@cache
def fibonacci(n):
    if n in [0, 1]:
        return n
    return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(11))  # Kết quả: 89
@lru_cache: Một lựa chọn tối ưu hơn @cache vì @lru_cache cho phép giới hạn dung lượng bộ nhớ đệm và chỉ lưu trữ một số lượng nhất định các kết quả gọi hàm gần nhất.
from functools import lru_cache
@lru_cache(maxsize=2)
def fibonacci(n):
    if n in [0, 1]:
        return n
    return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(11))  # Kết quả: 89
@wraps: Khi sử dụng decorator, hàm gốc thường bị mất thông tin, chẳng hạn như tên hàm và tài liệu (docstring). @wraps giúp giữ nguyên các thông tin của hàm gốc sau khi áp dụng decorator.
from time import time
from functools import wraps
def timeit(func):
    @wraps(func)
    def inner_timeit(*args, **kwargs):
        start = time()
        func(*args, **kwargs)
        print(f"Function ran in {time() - start} seconds")
    return inner_timeit
@timeit
def print_range(n: int):
    """Print numbers from 1 to n"""
    for i in range(1, n+1):
        print(i)
print(print_range.__name__)  # Kết quả: print_range
print(print_range.__doc__)   # Kết quả: Print numbers from 1 to n
Kết bài
Thư viện functools cung cấp các công cụ mạnh mẽ cho việc xử lý các hàm và tối ưu hóa hiệu suất trong Python. Việc hiểu rõ và sử dụng thư viện này sẽ giúp bạn dễ dàng làm việc với các hàm phức tạp và tận dụng tối đa các tính năng của ngôn ngữ.

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng