我正在学习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
。当然这样做会返回“未定义”错误。
答案 0 :(得分:1)
最简单的方法是使用eval
:
f0 = "x**2"
f = eval("lambda x:" + f0)
print f(2) # 4
请注意,这将接受并执行任何python表达式。这意味着错误检查可能很困难(因为用户可以提供的功能几乎没有约束)并打开主要的安全漏洞(因为用户可能导致程序执行任意代码)。这对于快速演示来说不是问题,但应该像生产系统那样避免使用。