将用户输入作为lambda函数传递

时间:2017-09-04 23:08:19

标签: python numpy lambda

我正在学习python,我不知道如何将字符串传递给lambda。

这是黎曼和的一个基本例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
#f0 = str(input("ingrese funcion:"))
f = lambda x: x**2
sum = 0.0
a = float(input("ingrese límite inferior:"))
b = float(input("ingrese límite superior:"))
n = int(input("ingrese cantidad de subintervalos:"))
i = b-a #la longitud del intervalo
dx = i/n #que diferencia habrá cada vez que evalúes
for xi in np.arange(a,b,dx):
    sum += dx*f(xi)
print "Valor de la suma de Riemann de f en [a,b] = " + str(sum)

我的想法是让f0作为用户定义的字符串(例如x**2 + 10),然后将f0传递给f。当然这样做会返回“未定义”错误。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用eval

f0 = "x**2"
f = eval("lambda x:" + f0)
print f(2) # 4

请注意,这将接受并执行任何python表达式。这意味着错误检查可能很困难(因为用户可以提供的功能几乎没有约束)并打开主要的安全漏洞(因为用户可能导致程序执行任意代码)。这对于快速演示来说不是问题,但应该像生产系统那样避免使用。