Cách đơn giản nhất để bọc một chức năng
func(*args, **kwargs)
... là tự viết một trình bao bọc sẽ gọi func () bên trong chính nó:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
Trong hàm Python là một đối tượng, vì vậy bạn có thể chuyển tên của nó làm đối số của hàm khác và trả về nó. Bạn cũng có thể viết một trình tạo trình bao bọc cho bất kỳ hàm anyFunc () :
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Cũng xin lưu ý rằng trong Python khi bạn không biết hoặc không muốn đặt tên cho tất cả các đối số của hàm, bạn có thể tham khảo một bộ các đối số, được biểu thị bằng tên của nó, trước dấu hoa thị trong dấu ngoặc đơn sau tên chức năng:
*args
Ví dụ: bạn có thể định nghĩa một hàm sẽ lấy bất kỳ số lượng đối số nào:
def testFunc(*args):
print args # prints the tuple of arguments
Python cung cấp cho thao tác hơn nữa trên các đối số chức năng. Bạn có thể cho phép một hàm lấy các đối số từ khóa. Trong thân hàm, các đối số từ khóa được giữ trong một từ điển. Trong ngoặc đơn sau tên hàm, từ điển này được biểu thị bằng hai dấu hoa thị theo sau là tên của từ điển:
**kwargs
Một ví dụ tương tự in từ điển đối số từ khóa:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments