我正在尝试应用更改函数代码的装饰器,然后使用更改后的代码执行此函数。
下面是temp带有示例功能的模块。我只是希望函数返回[*args, *kwargs.items(), 123]而不是[*args, *kwargs.items()]ifsome_decorator应用于此函数。
编辑:请注意,这只是一个玩具示例,我不打算将新值附加到列表中,而是重写一大块函数。
from inspect import getsource
def some_decorator(method):
def wrapper(*args, **kwargs):
source_code = getsource(method)
code_starts_at = source_code.find('):') + 2
head = source_code[:code_starts_at]
body = source_code[code_starts_at:]
lines = body.split('\n')
return_line = [i for i in lines if 'return' in i][0]
old_expr = return_line.replace(' return ', '')
new_expr = old_expr.replace(']', ', 123]')
new_expr = head + '\n' + ' return ' + new_expr
return eval(new_expr)
return wrapper
@some_decorator
def example_func(*args, …Run Code Online (Sandbox Code Playgroud)