gpt4 book ai didi

python - 如何使用装饰器为函数提供元数据?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:46 24 4
gpt4 key购买 nike

基于 this thread , 我有以下内容

import functools
def predicate(author, version, **others):
def _predicate(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
func.meta = {
'author': author,
'version': version
}
func.meta.update(others)
func(*args, **kwargs)
return wrapper
return _predicate

但是我无法得到简单的用例

@predicate('some author', 'some version')
def second_of_two(a, b):
return b

按预期工作:

>>> second_of_two.meta['author']
'some author'
>>> second_of_two(1, 2)
2

我在这里做错了什么?

最佳答案

好吧,我不明白你为什么要在这里使用 functools 东西,而你需要使它成为一个带参数的简单装饰器:

def predicate(author, version, **others):
def _predicate(func):
func.meta = {
'author': author,
'version': version
}
func.meta.update(others)
return func
return _predicate

@predicate('foo', 'bar')
def myfunc(i,j):
return i+j

print myfunc.meta
print myfunc(1,2)

给出:

{'version': 'bar', 'author': 'foo'}
3

关于python - 如何使用装饰器为函数提供元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306182/

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