gpt4 book ai didi

python - 调用另一个装饰器函数的装饰函数会正常返回吗?

转载 作者:行者123 更新时间:2023-12-01 05:20:34 24 4
gpt4 key购买 nike

在装饰器的情况下控制流如何工作?无论如何,我可以修改 calleedec 并使其在调用后不返回给调用者吗?这不是我想要的场景,我看到了类似的错误,所以想知道这是否可能? 这不是和普通函数一样吗?

尝试调试问题 - 我们遇到了第一个 pdb,但没有遇到第二个 pdb,如下面的场景所示?

两者都是修饰函数。

@cooldec()
def caller():
import pdb;pbd.set_trace() # Hits here
callee()
import pdb;pdb.set_trace() # Not here

@calleedec()
def callee():
return "Okay

编辑:

引发错误是一种情况,但没有错误跟踪。

我可以看到被调用者的装饰器处于无限循环中或无法完成其工作(需要很长时间)的情况,这种情况可能会发生。

最佳答案

装饰函数只是普通函数,在程序流程方面没有什么特别之处。

当有疑问时,尝试扩展装饰器,看看是否更清晰:

def calleedec(callee_fn):
def wrapped():
print("Running the callee")
callee_fn()
return wrapped

def callee():
return "Okay"

callee = calleedec(callee)

def cooldec(fn):
def wrapped():
print("Running the caller")
return fn()
return wrapped

@cooldec
def caller():
print("caller: start")
callee()
print("caller: end")

caller()

# Running the caller
# caller: start
# Running the callee
# caller: end

为了避免被调用者劫持流程并且不返回调用者函数,您需要对堆栈执行一些严重的黑魔法。所以我认为你不应该担心这个。

如果您没有到达第二个 pdb 断点,则被调用函数中可能会发生某些情况。

关于python - 调用另一个装饰器函数的装饰函数会正常返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22482906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com