Python函数装饰器错误

时间:2017-08-20 12:30:17

标签: python python-3.x decorator python-decorators

我尝试使用函数装饰器,但在这个例子中它不适合我,你能给我解决方案吗?

$replay = file_get_contents('steppes.txt');
$info = unpack('Vmagic/Vcount', $replay);
echo 'Magic: ' . $info['magic'];
echo '<br/>';
echo 'Count: ' . $info['count'];

解释器打印错误:&#34; TypeError:decorator()获取0个位置参数,但给出2个&#34;

1 个答案:

答案 0 :(得分:5)

使用装饰器时,从装饰器返回的函数将替换旧函数。换句话说,decorator中的multiply_by_three函数会替换add函数。

这意味着每个函数签名都应该匹配,包括它们的参数。但是,在您的代码中,add需要两个参数,而decorator则不会。你需要让decorator接收两个参数。您可以使用*args and **kwargs

轻松完成此操作
def multiply_by_three(f):
    def decorator(*args, **kwargs):
        return f(*args, **kwargs) * 3
    return decorator

如果您现在装饰您的功能并运行它,您可以看到它的工作原理:

@multiply_by_three
def add(a, b):  
    return a + b

print(add(1,2)) # 9