为什么装饰器return类型None?

Why does the decorator return the type 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))

提前致谢!

P.S。 我这样做是为了教育目的,为了更好地理解装饰器模式

result = func(arg).append(4)

append 不是 return 新列表。它就地修改列表。您将 result 作为 append 的 return 值,然后对它进行 return 处理,所以最后 returned 的值为 None .

您可以将其更改为:

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

或者,在一行中:

return func(arg) + [4]