在 Python 中,有没有一种很好的方法可以将装饰器(或类似的东西)应用到函数体的一个子段而不是整个函数?我想要的可能看起来像这样:def deco_double(f): def wrapper(): f() f() return wrapperdef foo(): @deco_double: print("hello") print("stack") @deco_double: print("overflow")foo()所以执行结果如下:hellostackhellostackoverflowoverflow如果解决方案不完全是装饰器也没关系,我需要的是一种包装函数子段的方法,但要以一种很好的抽象方式。先感谢您 :)编辑: 只是分成多个功能对我来说不是一个选择。我正在为程序员开发一个框架,我希望他们以紧凑的方式编写函数(用于在示例中编写 foo()。此外,我实际上在做的事情远比重复复杂得多)编辑2: 现在看来我别无选择,只能期望框架用户以某种方式声明命名函数......
3 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
您必须提取部分功能foo()以分离函数,然后将装饰器作为函数应用并显式调用它。
def deco_double(f):
def wrapper():
f()
f()
return wrapper
def my_f1():
print("hello")
print("stack")
def my_f2():
print("overflow")
def foo():
deco_double(my_f1)()
deco_double(my_f2)()
foo()
达令说
TA贡献1821条经验 获得超6个赞
只需使用装饰器声明两个具有任何名称的@deco_double函数,并在任何其他函数中调用它们,在您的情况下foo(),然后简单地调用foo().
def deco_double(f):
def wrapper():
f()
f()
return wrapper
@deco_double
def func1():
print("hello")
print("stack")
@deco_double
def func2():
print("overflow")
def foo():
func1()
func2()
foo()
此代码的输出。
hello
stack
hello
stack
overflow
overflow
添加回答
举报
0/150
提交
取消