Câu trả lời của DSM và Tadeck trả lời trực tiếp câu hỏi của bạn.
Trong các tập lệnh của mình, tôi thường sử dụng tiện ích dict.pop()
để xử lý các đối số tùy chọn và bổ sung. Đây là một ví dụ về print()
trình bao bọc đơn giản :
def my_print(*args, **kwargs):
prefix = kwargs.pop('prefix', '')
print(prefix, *args, **kwargs)
Sau đó:
>>> my_print('eggs')
eggs
>>> my_print('eggs', prefix='spam')
spam eggs
Như bạn có thể thấy, nếu prefix
không được chứa trong kwargs
, thì mặc định ''
(chuỗi trống) đang được lưu trữ trong prefix
biến cục bộ. Nếu nó được đưa ra, thì giá trị của nó đang được sử dụng.
Đây thường là một công thức nhỏ gọn và dễ đọc để viết các trình bao bọc cho bất kỳ loại hàm nào: Luôn chỉ chuyển qua các đối số mà bạn không hiểu và thậm chí không biết chúng có tồn tại hay không. Nếu bạn luôn chuyển qua *args
và **kwargs
bạn làm cho mã của mình chậm hơn và yêu cầu nhập nhiều hơn một chút, nhưng nếu giao diện của hàm được gọi (trong trường hợp này print
) thay đổi, bạn không cần phải thay đổi mã của mình. Cách tiếp cận này làm giảm thời gian phát triển trong khi hỗ trợ tất cả các thay đổi giao diện.