gpt4 book ai didi

python - Python 中的 []-esque 装饰器语法是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 20:57:24 24 4
gpt4 key购买 nike

这是 TurboGears 1.0.6 中的一段代码:

[dispatch.generic(MultiorderGenericFunction)]
def run_with_transaction(func, *args, **kw):
pass

我不知道在函数定义之前放置一个列表会如何影响它。

在 dispatch.generic 的文档字符串中,它提到:

Note that when using older Python versions, you must use '[dispatch.generic()]' instead of '@dispatch.generic()'.

好吧,这显然是一种在预装饰器版本的 Python 中获得类似装饰器行为的方法,但它到底怎么可能起作用呢?

最佳答案

装饰器语法由 PyProtocols 提供。

"""最后,重要的是要注意这些“魔术”装饰器使用了一个非常偷偷摸摸的黑客:他们滥用 sys.settrace() 调试器钩子(Hook)来跟踪分配是否正在发生。 Guido 对此持模糊看法,但钩子(Hook)的现有功能不会在 2.2、2.3 或 2.4 中发生变化,所以不要太担心。这确实是“提前访问”装饰器的一个技巧,而且 2.4 的生命周期足够长,足以让我们的代码切换到 2.4 语法。在 Python 2.5 或 2.6 的某个地方,add_assignment_advisor() 可以放弃神奇的部分,而只是作为使用它的装饰器的向后兼容包装器。""" http://dirtsimple.org/2004/11/using-24-decorators-with-22-and-23.html

所以听起来这些工作是通过将实际的装饰器包装在一些魔术中来实现的,这些魔术 Hook 到特殊代码中,供调试器操纵实际为函数分配的内容。

python 文档是这样说的 settrace

"""笔记settrace() 函数仅用于实现调试器、分析器、覆盖工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此可能不适用于所有 Python 实现。"""

关于python - Python 中的 []-esque 装饰器语法是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/379291/

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