python - 在装饰器中定义函数

标签 python aop decorator argument-passing

为什么这不起作用?我怎样才能让它发挥作用?也就是说,如何让 gu 在我的修饰函数中可访问?

def decorate(f):
    def new_f():
        def gu():
            pass
        f()
    return new_f

@decorate
def fu():
    gu()

fu()

我是否需要以某种方式将 gu 添加到已定义函数的字典中?或者我可以在调用它之前将 gu 添加到 f 的本地命名空间吗?

最佳答案

如果您需要将 gu 传递给 fu,您需要通过参数明确地执行此操作:

def decorate(f):
    def new_f():
        def gu():
            pass
        f(gu)
    return new_f

@decorate
def fu(gu):
    gu()

fu()

关于python - 在装饰器中定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1141902/

相关文章:

python - python 装饰器是否可以根据较早的装饰器结果执行或跳过?

python - 使用替代模块满足 pip 要求

python - 使用 `multiprocessing.Pool` 在多个 GPU 上平均分配作业

java - Aspectj:在 aop.xml 中声明时切入点不再起作用(LTW)

java - AspectJ 与切入点混淆

python - 为一个完整的模块定义 Python 装饰器

python - 无法通过Python创建SO问题的MySQL数据库

python - 在 OIL 或 Imagemagick 中将彩色叠加层应用于图像

c# - 获取有关 Ninject 拦截的方法的信息

python - 以侵入性最小、最隐形的方式检测对象使用情况