python - 为什么装饰器返回类型 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我这样做是出于教育目的,以便更好地理解装饰器模式
解决方案
result = func(arg).append(4)
append
不返回新列表。它就地修改列表。你得到 的result
作为返回值,append
然后返回它,所以最后返回的值是None
。
您可以将其更改为:
result = func(arg)
result.append(4)
return result
或者,在一行中:
return func(arg) + [4]
推荐阅读
- java - Spring WebFlux中如何实现级联方法
- kotlin - 如何检查所有多个值是否满足一个或另一个条件
- python - 在 python 中查找 selenium 自动化的按钮元素
- apache-spark - 减少 Spark Streaming Info 日志的频率
- javascript - 如何在组件中使用 Vue mixin 方法
- github-actions - 从 github 操作步骤中检索输出错误
- python - 如何从 python 解释器命令行获取 python 脚本路径?
- python - Python:从 Repl.it 复制到 Visual Studio 的代码无法正确运行:无效参数错误
- stylesheet - 我正在尝试删除或更改表格元素的样式
- c++ - 注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义