Đối với trang trí tôi viết, tôi muốn thao tác một tham số được đặt tên cụ thể của hàm. Hãy xem xét các trang trí sau:Làm cách nào tôi có thể xử lý đối số vị trí dưới dạng đối số từ khóa trong Python 2
def square_param(param):
def func_decorator(func):
def func_caller(*args,**kwargs):
kwargs[param] = kwargs[param] * kwargs[param]
return func(*args,**kwargs)
return func_caller
return func_decorator
Ứng dụng trên chức năng tiếp theo:
@square_param('dividend')
def quotient(divisor=1,dividend=0):
return dividend/divisor
Điều này sẽ có tác dụng nếu cổ tức được gọi là một cuộc tranh luận từ khóa ví dụ:
>>> quotient(dividend=2)
4
Tuy nhiên, khi đưa ra là một lập luận vị trí điều này sẽ thất bại.
>>> quotient(3,4)
TypeError: quotient() got multiple values for keyword argument 'dividend'
Với Python 3 tôi có thể giải quyết việc này bằng cách buộc các tham số để được always given as a keyword:
@square_param('dividend')
def quotient(divisor=1,*,dividend=0):
return dividend/divisor
nhưng tôi muốn hỗ trợ Python 2 và tôi cũng muốn đặt các hạn chế càng ít về chức năng .
Có cách nào để tôi có thể khắc phục hành vi này trong trang trí của mình không?
Kiểm tra các mô-đun kiểm tra. Nó có thể có những gì bạn cần cho việc này. Có một cái nhìn tại getargspec. – Dirk