使用字符串变量定义函数

时间:2016-07-30 14:22:38

标签: 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?

2 个答案:

答案 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运行该函数并打印输出。

希望这有帮助!