2017-09-04 22 views
0

我正在學習python,我不知道如何將字符串傳遞給lambda。傳遞用戶輸入作爲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),然後傳遞到f0f。當然,這樣做會返回一個「未定義」的錯誤。

+1

你想讓用戶指定功能嗎? –

+0

是的,在下面的評論我沒有把什麼工作 – pachamaltese

回答

1

要做到這一點,最簡單的方法是使用eval

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

注意,這將接受並執行任何Python表達式。這意味着錯誤檢查可能很困難(因爲用戶可以提供的函數幾乎沒有限制)並且會打開主要的安全漏洞(因爲用戶可能導致程序執行任意代碼)。這對於快速演示來說不是問題,但是在生產系統中應該避免這種情況。

+0

我知道安全;)它工作正常;) – pachamaltese

相關問題