gpt4 book ai didi

python - 在 Python 中用参数装饰是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 00:28:41 24 4
gpt4 key购买 nike

在 Python 中,我对装饰器略知一二。在我的理解中,装饰函数声明返回装饰函数用原始函数构造的任何内容(最合理的是这应该是可调用的):

def deco(func):
def func_wrapper(name):
return func(name)+", how are you?"
return func_wrapper

@deco
def foo(name):
return "Hello "+name

print(foo("Michael"))

这给出:

Hello Michael, how are you?

但是,如果装饰器与参数一起指定会怎样:

def deco2(info):
def info_decorator(func):
def func_wrapper(name):
return func(name) + info
return func_wrapper
return info_decorator

@deco2(", how are you?")
def foo2(name):
return "Hello "+name

print(foo2("Regina"))

给予

Hello Regina, how are you?

处理这个装饰器的“规则”是什么?似乎,Python 不是返回 foo2,而是首先使用给定的 arg 调用 deco2,并且假设 ,这个调用首先为装饰器构造一个工厂,然后像以前一样将 foo2 传递给它以返回最终包装器。但是,在这种情况下,还涉及一个额外的“”(三个定义而不是两个),这让我很难确定一般规则。

最佳答案

如果你在没有参数的情况下应用装饰器,例如@foo,然后装饰器将被装饰的函数作为其参数,并期望返回将替换装饰函数的任何可调用对象。

如果您应用装饰器参数,例如@foo('bar'),那么装饰器应该返回一个可调用对象,它将被装饰的函数作为它的参数,并返回一个可调用的对象来替换被装饰的函数。

换句话说:一个没有参数的装饰器只需要被装饰的函数,但是一个有参数的装饰器需要它自己的参数并且它需要以某种方式获得被装饰的函数。由于装饰器的参数是任意的并且不受任何限制,因此很难想出任何非限制性规则来说明如何将被装饰器也额外传递给它。在这种情况下,应用两步过程:获取装饰器参数,然后返回另一个接受装饰器的可调用对象。

关于python - 在 Python 中用参数装饰是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561589/

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