You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用函数装饰器跨文件向列表追加函数失效如何解决?

问题原因
  • 未导入module1.py模块:Python装饰器仅在被装饰函数的定义阶段执行,run.py当前只导入了add.py,没有导入module1.py,因此module1.py中hello函数的装饰逻辑完全没有触发,不会向add.functions列表写入内容。
  • 装饰器逻辑错误:你当前将functions.append(f)写在了wrapper内部,这行代码只会在调用被装饰后的函数时才会执行,不符合你「装饰阶段就将函数加入列表」的预期。
修复方案
  1. 调整add.py的装饰器逻辑,将函数追加操作移到wrapper外层,确保装饰执行时就把目标函数加入列表:
functions = []

# 将函数"f"追加到"functions"列表中,在run.py中导入该文件即可任意访问此列表
def foo(f):
    functions.append(f)
    def wrapper():
        value = f()
        return value
    return wrapper
  1. 修改run.py,新增module1的导入语句,触发装饰器执行:
import add
import module1

print(add.functions)

# 执行下标为0的函数,预期控制台输出"hello"
add.functions[0]()
运行验证

修改后执行run.py,输出如下,符合预期效果:

[<function hello at 0x某内存地址>]
hello

内容的提问来源于stack exchange,提问作者user16073849

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:15:04