python小白 問關於匿名函數的問題
扔个三星炸死你
扔个三星炸死你 2017-06-13 09:24:43
0
3
968

第一段程式碼:

#
# -*- coding:gb2312 -*-
def test(a,b,funC):
    result = funC(a,b)
    return result

funC = eval(input("请输入函数"))
num = test(11,22,funC)
print(num)

在input當中可以輸入類似 lambda x,y:x y 這樣的匿名函數。
現在我覺得輸入lambda x,y:x y太麻煩,我想把前面的lambda x,y:這段給直接寫上去,input輸入的時候,直接輸入x y這一部分,於是我把代碼改成如下:

第二段程式碼:

#
# -*- coding:gb2312 -*-
def test(a,b,funC):
    result = funC(a,b)
    return result

funA = eval(input("请输入函数"))
funB = "lambda x,y:"
funC = eval(funB)+funC
num = test(11,22,funC)
print(num)

改成之後,我執行程式:

#結果報出以下錯誤。
一下子沒看懂,不知道這裡是什麼意思。
我想問,為什麼我這樣改不行?
第一段程式碼當中的:

funC = eval(input("请输入函数")) #运行时输入:lambda x,y:x+y

和第二段程式碼當中的:

funA = eval(input("请输入函数"))  #运行时输入:x+y
funB = "lambda x,y:"
funC = eval(funB)+funC

這兩段程式碼不應該是等價的麼?
為什麼前者可以順利執行,後者會報錯?

扔个三星炸死你
扔个三星炸死你

全部回覆(3)
刘奇

第二段程式碼應該是:

strA = input("请输入函数")
strB = "lambda x,y:"
funC = eval(strB+strA)

你輸入的不是函數不是函數不是函數,輸入的是字元竄。 eval這個函數的作用是把你輸入的字串當成python程式碼來執行

滿天的星座

兩點:

# -*- coding:gb2312 -*-
def test(a,b,funC):
    result = funC(a,b)
    return result

funA = input("请输入函数") #这儿改成 input("请输入函数")
funB = "lambda x,y:"
funC = eval(funB)+funC   #这儿改成 eval(funB+funA)
num = test(11,22,funC)
print(num)
phpcn_u1582

雷雷

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板