Python 使用字符串变量定义函数
我试图创建一个函数“a21”,它接受一个参数x并向其添加4Python 使用字符串变量定义函数,python,Python,我试图创建一个函数“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?编写一个功能齐全的函数定义: new = ''' def a21(x): return x + 4 ''' 然后执行它:exec(new)并
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?编写一个功能齐全的函数定义:
new = '''
def a21(x):
return x + 4
'''
然后执行它:exec(new)
并运行:a21(678)
如果要在运行时构造函数,请使用字符串格式
new = '''
def {}({}):
return {}
'''
exec(new.format('test', 'x', 'x+4'))
test(123)
以下是可能的,并且做的事情几乎相同: 您可以在下面这样的函数中绑定该函数
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运行该函数并打印输出
希望这有帮助
def eval(新):返回eval(eq)
将导致无限递归eval
可能是危险的,通常仅在没有其他选项时作为最后手段使用。看起来您通常要求使用类似于SymPyYou needexec
的命令来执行类似于def
的语句eval
只计算表达式。@chepner,是的,你说得对,我要编辑我的答案