Tôi đang viết một trình trang trí cần phải gọi các chức năng khác trước khi gọi hàm mà nó đang trang trí. Chức năng được trang trí có thể có các đối số vị trí, nhưng các chức năng mà người trang trí sẽ gọi chỉ có thể chấp nhận các đối số từ khóa. Có ai có một cách thuận tiện để chuyển đổi các đối số vị trí thành các đối số từ khóa không?Python chuyển đổi args sang kwargs
tôi biết rằng tôi có thể nhận được một danh sách các tên biến của hàm trang trí:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Nhưng tôi không thể tìm ra cách để nói với những gì được thông qua năm địa vị và những gì là như từ khóa.
trang trí của tôi trông như thế này:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
Có cách nào khác hơn là kwargs chỉ so sánh và co_varnames, thêm vào kwargs bất cứ điều gì không trong đó, và hy vọng cho là tốt nhất?
Tại sao bạn bạn cần phải biết những gì args là vị trí? –
Bởi vì tôi cần phải chuyển đổi chúng thành kwargs để gọi trong chức năng hozer. Hàm này chỉ chấp nhận các kwarg, nhưng nó cần phải biết về tất cả các đối số ban đầu được gọi. Vì vậy, tùy thuộc vào việc mọi người có gọi chức năng được trang trí với các đối số vị trí hoặc được đặt tên, chức năng hozer có thể hoặc không thể nhận được tất cả dữ liệu cần thiết. – jkoelker