为什么装饰器返回 None 类型?

时间:2021-07-05 10:59:08

标签: python python-decorators

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

我得到了与装饰器一起工作的函数的结果无

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))

先谢谢你!

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

1 个答案:

答案 0 :(得分:1)

result = func(arg).append(4)

append 不会返回新列表。它就地修改列表。您将获得 result 作为 append 的返回值,然后返回它,因此最后返回的值为 None

您可以将其更改为:

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

或者,在一行中:

return func(arg) + [4]