简体   繁体   English

是否可以将参数传递给装饰函数?

[英]Is it possible to pass argument to a decorated function?

I have written the below decorator: 我写了下面的装饰器:

import time

def runtime(some_function):   
    def wrapper():
        start = time.time()        
        some_function()         
        runtime = time.time() - start   
        print(runtime)       
    return wrapper              

@runtime
def printing(upper_limit):
    for number in range(upper_limit):
        print(number)

printing(10)
printing(100)
printing(1000)
printing(10000)

Why do I get: 为什么会得到:

TypeError: wrapper() takes 0 positional arguments but 1 was given TypeError:wrapper()接受0个位置参数,但给出了1个

when running the code and how to fix it? 运行代码时如何解决?

You need to make wrapper accept arguments and pass them to some_function . 您需要使wrapper接受参数并将其传递给some_function It should also return what some_function returns to be more generic. 它还应返回some_function返回的内容,以使其更通用。

def runtime(some_function):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = some_function(*args, **kwargs)
        runtime = time.time() - start
        print(runtime)
        return result
    return wrapper

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM