python小白 問關(guān)于匿名函數(shù)的問題
問題描述
第一段代碼:
# -*- coding:gb2312 -*-def test(a,b,funC): result = funC(a,b) return resultfunC = eval(input('請輸入函數(shù)'))num = test(11,22,funC)print(num)
在input當中可以輸入類似 lambda x,y:x+y 這樣的匿名函數(shù)。現(xiàn)在我覺得輸入lambda x,y:x+y太麻煩,我想把前面的lambda x,y:這一段給直接寫上去,input輸入的時候,直接輸入x+y這一個部分,于是我把代碼改成如下:
第二段代碼:
# -*- coding:gb2312 -*-def test(a,b,funC): result = funC(a,b) return resultfunA = eval(input('請輸入函數(shù)'))funB = 'lambda x,y:'funC = eval(funB)+funCnum = test(11,22,funC)print(num)
改成之后,我運行程序:
結(jié)果報出如下錯誤。一下子沒看懂,不知道這里是什么意思。我想問,為什么我這樣改不行呢?第一段代碼當中的:
funC = eval(input('請輸入函數(shù)')) #運行時輸入:lambda x,y:x+y
和第二段代碼當中的:
funA = eval(input('請輸入函數(shù)')) #運行時輸入:x+yfunB = 'lambda x,y:'funC = eval(funB)+funC
這兩段代碼不應(yīng)該是等價的么?為什么前者可以順利執(zhí)行,后者會報錯?
問題解答
回答1:第二段代碼應(yīng)該是:
strA = input('請輸入函數(shù)')strB = 'lambda x,y:'funC = eval(strB+strA)
你輸入的不是函數(shù)不是函數(shù)不是函數(shù),輸入的是字符竄。eval這個函數(shù)的作用是把你輸入的字符串當成python代碼來執(zhí)行
回答2:兩點:
# -*- coding:gb2312 -*-def test(a,b,funC): result = funC(a,b) return resultfunA = input('請輸入函數(shù)') #這兒改成 input('請輸入函數(shù)')funB = 'lambda x,y:'funC = eval(funB)+funC #這兒改成 eval(funB+funA)num = test(11,22,funC)print(num)回答3:
funC = eval('lambda x,y:' + input('請輸入函數(shù)'))num = test(11,22,funC)print(num)
相關(guān)文章:
1. java servlet后臺導(dǎo)出上萬條數(shù)據(jù)到excel,太慢!求解2. javascript - 一排三個框,各個框的間距是15px,距離外面的白框間距也是15px,這個css怎么寫?3. mysql函數(shù)unix_timestamp如何處理1970.1.1以前的數(shù)據(jù)?4. 怎樣使留言的數(shù)據(jù)與登錄的用戶名,密碼保持一致(在數(shù)據(jù)庫上是一行的)。5. mysql money 插入數(shù)據(jù)為什么報錯?6. java - 關(guān)于使用POI解析excel中的時間格的值7. html - 急求,能否用flex或者高端點的CSS來布局這個圖呢?不想用浮動或定位了8. css如何實現(xiàn)兩欄布局,左邊固定寬度,右邊寬度自適應(yīng),且高度和瀏覽器當前高度一致?9. javascript - vue-cli 發(fā)布之后,如何在接口地址中去掉在開發(fā)環(huán)境中設(shè)置的跨域proxyTable配置10. 請問永久和臨時重定向有什么區(qū)別
