Thư viện chuẩn Python có lối tắt để viết trang trí chấp nhận đối số không?Python: phím tắt để viết trang trí chấp nhận đối số?
Ví dụ, nếu tôi muốn viết một trang trí như with_timeout(timeout)
:
@with_timeout(10.0)
def cook_eggs(eggs):
while not eggs.are_done():
eggs.cook()
tôi phải viết một cái gì đó như:
def with_timeout(timeout):
_func = [None]
def with_timeout_helper(*args, **kwargs):
with Timeout(timeout):
return _func[0](*args, **kwargs)
def with_timeout_return(f):
return functools.wraps(f)(with_timeout_helper)
return with_timeout_return
Nhưng đó là hết sức tiết. Có một phím tắt khiến cho những người trang trí chấp nhận các đối số dễ viết hơn không?
Lưu ý: Tôi nhận ra rằng nó cũng có thể sử dụng ba hàm lồng nhau để triển khai trình trang trí với đối số… Nhưng điều đó cũng chỉ có một chút tối ưu.
Ví dụ, có thể là một cái gì đó giống như một chức năng @decorator_with_arguments
:
@decorator_with_arguments
def timeout(f, timeout):
@functools.wraps(f)
def timeout_helper(*args, **kwargs):
with Timeout(timeout):
return f(*args, **kwargs)
return timeout_helper
Nếu bạn cần thêm trợ giúp với trang trí và chú thích xem bài đăng blog của tôi ở đây. http://blog.mattalcock.com/2013/1/5/decorates-and-annotations/ –