小编sha*_*mar的帖子

使用装饰器更改函数代码并使用 eval 执行它?

我正在尝试应用更改函数代码的装饰器,然后使用更改后的代码执行此函数。

下面是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)

python eval decorator

1
推荐指数
1
解决办法
627
查看次数

标签 统计

decorator ×1

eval ×1

python ×1