首页 > 解决方案 > 为什么装饰器返回类型 None ?

问题描述

帮助我理解为什么这个装饰器不会在 do_list() 函数中形成的列表的末尾添加一个值。

我得到了使用装饰器的函数的结果 None

def dec_do_list(func):
    def wrapper(arg: int):
        result = func(arg).append(4)
        return result
    return wrapper
@dec_do_list
def do_list(arg: int):
    import random
    result = []
    for i in range(arg):
        result.append(random.random())
    return result

print(do_list(4))

先感谢您!

PS我这样做是出于教育目的,以便更好地理解装饰器模式

标签: pythonpython-decorators

解决方案


result = func(arg).append(4)

append不返回新列表。它就地修改列表。你得到 的result作为返回值,append然后返回它,所以最后返回的值是None

您可以将其更改为:

result = func(arg)
result.append(4)
return result

或者,在一行中:

return func(arg) + [4]

推荐阅读