a.py
import d
d.funcme('blah')
d.py
不带argcheck decorator的输出(注释掉@argcheck((str))
):
$ python a.py
__main__ 3
带argcheck
修饰符的输出:
$ python a.py
+++++++++ checking types before calling the func
defines 9
问题:
decorator在做什么来改变_getframe
的值?
如何保存信息,使其捕获原始信息,即__main__
3而不是定义9?
修饰语基本上是句法糖。这个:
与此相同:
^{pr2}$现在您可以看到装饰器为什么要更改调用堆栈。在
我不知道如何在任意情况下解决这个问题,但是如果您事先知道一些关于decorator的信息,您也许可以补偿您的代码。您还可以查看functools.wraps,也许这会提供一些可能有帮助的线索。在
问题是,^{cd1>}函数假设它是通过其他东西直接间接调用的,例如装饰器。可以通过更改其调用顺序并添加附加的^{cd2>}关键字参数来修复此问题,该参数的默认值将传递给^{{cd3>}。在这个脚手架就位后,装饰器可以覆盖默认值。无论是否应用了装饰器,以下内容都将打印相同的内容:
相关问题 更多 >
编程相关推荐