gpt4 book ai didi

python:用默认的kwargs装饰函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:10 26 4
gpt4 key购买 nike

我怎样才能定义一个装饰器 decor 来完成这项工作?有很多关于此的帖子,但我仍然没有找到解决方案。也许这是一个非常糟糕的主意。

示例 1,编写一个在应用装饰器之前中断的函数:

defaults = {'a': 1, 'b': 2}

@decor(defaults)
def f(x):
print(x, a, b)

示例 2:

defaults = {'a': 1, 'b': 2}

@decor(defaults)
def fun(x):
print(locals())

f(3)

应该给

{'b': 2, 'x': 3, 'a': 1}

或者可能更清楚,我希望装饰器修改签名,以便 help(f) 给出

Help on function f in module __main__:

f(x, a=1, b=2)

最佳答案

好吧,你已经被警告过这是不安全的,但是为了好玩,这个装饰器必须工作,不管装饰函数是否接收 kwargs 或不

import inspect as insp

def modify(f, defaults):
lines = insp.getsourcelines(f)[0]
lines.pop(0) # remove decorator heading
for k, v in defaults.items():
lines.insert(1, ' %s = %s\n' % (k, v))
exec ''.join(lines)
return locals()[f.__name__]

def decor(defaults):
def wrap(f):
def wrapped_f(*args):
new_f = modify(f, defaults)
return new_f(*args)
return wrapped_f
return wrap

关于python:用默认的kwargs装饰函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493183/

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