gpt4 book ai didi

python - 嵌套的 python 装饰器?

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:59 25 4
gpt4 key购买 nike

不知道是不是“嵌套python装饰器?”是陈述这个问题的正确方式,所以如果不是,请告诉我。

无论如何,我正在 udacity 上课,刚刚遇到一些涉及 python 装饰器的代码,看起来像巫毒魔法,所以现在我想问一个普遍的问题,看看我是否能弄清楚这些代码。

假设我有以下代码:

def A(f):
print 'blah'
return f

@A
def B(f):
return f

@B
def C():
pass

现在,我从上面的代码中了解到,装饰器使 B 变成:

B = A(B)

这就是装饰器的作用。然而,C 是怎样的呢?从我看到的一些小示例代码来看,C 以某种方式受到 A 的影响,因为 A 改变了 B 而 B 改变了 C。但是我有两个理解这个问题:

  1. C 的确切性质。是 C = A(B)(C) 还是 C = A(B(C))
  2. 如果 C 确实受到 A 的影响,为什么运行上述代码时 'blah' 只打印一次?

个人猜测

实际上,既然我已经把它打出来了,我假设我们首先得到的是:B = A(B)然后 C = B(C)。这意味着总的来说,我们得到 C = A(B)(C),这将解释为什么 'blah' 只打印一次。

但我最好确定一下。

最佳答案

你的个人猜测是正确的。

@ 行及其后面的函数定义被求值时,装饰器在定义时被“调用”。

@foo
def bar():
pass

只是...的语法糖

def bar():
pass
bar = foo(bar)

关于python - 嵌套的 python 装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219184/

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