我想导入一个函数:
from random import randint
然后将装饰器应用于它:
@decorator
randint
我想知道是否有一些语法糖(就像我上面所说的那样),或者我必须这样做:
@decorator
def randintWrapper(*args):
return random.randint(*args)
答案 0 :(得分:34)
装饰器只是用装饰版本替换函数对象的语法糖,其中装饰只是调用(传入原始函数对象)。换句话说,语法:
@decorator_expression
def function_name():
# function body
粗略地(*)转换为:
def function_name():
# function body
function_name = decorator_expression(function_name)
在您的情况下,您可以手动应用装饰器:
from random import randint
randint = decorator(randint)
(*)在函数或类上使用@<decorator>
时,def
或class
定义的结果未绑定(分配给它们的名称)在当前命名空间中)首先。装饰器直接从堆栈传递对象,然后只绑定装饰器调用的结果。