使用 python eval 时将函数添加到上下文

问题描述 投票:0回答:1

我想定义一些稍后可以使用的上下文函数,如下面的示例所示。

def add(x, y):
    return x + y

def g(x):
    u = my_func(x, 4 ** x)
    return my_func(u, u // 2)

eval('g(1)', globals() | {'my_func': add})

此代码会抛出

NameError: name 'my_func' is not defined
。有什么方法可以实现这一点(理想情况下不改变功能
add
g
)?

python eval
1个回答
0
投票

实现此目的的一种方法是将函数作为参数传递。但是,您必须为此稍微编辑一下 g() 函数:

def add(x, y):
    return x + y

def g(my_func, x):
    u = my_func(x, 4 ** x)
    return my_func(u, u // 2)

functs = {'my_func': add}
eval(f'g({functs["my_func"].__name__}, 1)', globals())

在这里,我将可调用的

add
作为参数传递。由于评估,我必须将其转换为字符串,因此它需要 __name__ 字段。

© www.soinside.com 2019 - 2024. All rights reserved.