Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字符串变量定义函数_Python - Fatal编程技术网

Python 使用字符串变量定义函数

Python 使用字符串变量定义函数,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)并

我试图创建一个函数“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)
并运行:
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 need
exec
的命令来执行类似于
def
的语句
eval
只计算表达式。@chepner,是的,你说得对,我要编辑我的答案