gpt4 book ai didi

Python:对装饰器非常困惑

转载 作者:行者123 更新时间:2023-11-28 19:31:37 26 4
gpt4 key购买 nike

我以为我了解装饰器,但现在不了解了。装饰器是否只有在创建函数时才起作用?

我想创建一系列函数,它们都有一个名为“ticket_params”的必需参数,它是一个字典。然后用 @param_checker(['req_param_1', 'req_param_2']) 之类的东西装饰它们,然后如果字典中没有 'req_param_1' 和 'req_param_2',则引发自定义异常子类。我是不是想错了?

在调用代码中会是这样的:

@param_checker(['req_param_1', 'req_param_2'])
def my_decorated_function(params):
# do stuff

params = {'req_param_1': 'Some Value'}
my_decorated_function(params)

# exception would be raised here from decorator.

最佳答案

def 语句之后立即应用装饰器;等价的是:

@param_checker(['req_param_1', 'req_param_2'])
def my_decorated_function(params):
# do stuff

与以下内容完全相同:

def my_decorated_function(params):
# do stuff
my_decorated_function = param_checker(['req_param_1', 'req_param_2'])(my_decorated_function)

因此 param_checker 的工作是返回一个函数,该函数将要修饰的函数作为其参数,并返回另一个执行您需要的函数。目前还好吗?

编辑:所以,这是一个实现...:

import functools

def param_checker(reqs):
reqs = set(reqs)
def middling(f):
@functools.wraps(f)
def wrapper(params):
missing = reqs.difference(params)
if missing:
raise TypeError('Missing parms: %s' % ', '.join(sorted(missing)))
return f(params)
return wrapper
return middling

关于Python:对装饰器非常困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031559/

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