我正在尝试创建一个函数“a21”,它接受一个参数x并将其加4。
eq = 'x+4'
b=21
new='a'+str(b)+'(x)'
def eval(new):
return eval(eq)
c=5
print(a21(c))
所需的输出为9,但它没有将a21识别为函数。如何编写这个来创建一个函数a21,它也带有参数x?
答案 0 :(得分:2)
编写功能齐全的函数定义:
new = '''
def a21(x):
return x + 4
'''
然后exec
使用它:exec(new)
并运行:a21(678)
。
如果要在运行时构造函数,请使用字符串格式。
new = '''
def {}({}):
return {}
'''
exec(new.format('test', 'x', 'x+4'))
test(123)
答案 1 :(得分:0)
以下是可能的,几乎完全相同: 您可以在下面的函数中绑定函数。
eq = 'x+4'
def bindfunc(name):
def dynamicfunc(x):
return eval(eq)
dynamicfunc.__name__ = name
return dynamicfunc
你使用它的方式会有所不同:
b=21
new='a'+str(b) #your function name
c=5
print(bindfunc(new)(c))
最后一行的作用是它首先运行bindfunc,它返回一个具有给定名称的函数。然后根据需要使用输入c运行该函数并打印输出。
希望这有帮助!