我想定义一些稍后可以使用的上下文函数,如下面的示例所示。
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
)?
实现此目的的一种方法是将函数作为参数传递。但是,您必须为此稍微编辑一下 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__ 字段。