简体   繁体   中英

Function prints none instead of printing what I want it to print in decorators in Python

I am studying on decorators in Python. I was trying to use the decorators with arguments. I'm having a problem with the decorators. I defined two inner function in the default decorator function. It returns none when I use it as below:

def prefix(write: bool = False):
    def thread(func):
        def wrapper(*args, **kwargs):
            t1 = Thread(target=func, args=args, kwargs=kwargs)
            t1.start()
            if write:
                print("write parameter is true.")
        return wrapper
    return thread


@prefix(write=True)
def something(x):
    return x + x


print(something(5))

As you see, I defined two different functions named prefix and something. If the write parameter is true, it prints the string. But something function is printing "None" instead of printing 5 + 5.

What's wrong?

Well, your wrapper() function doesn't have a return statement, so it will always return None .

Furthermore, how would you expect it to print 5 + 5 (or rather, the result thereof) when that may not have been computed yet, considering you're starting a new thread to do that and never do anything with the return value of func at all?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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