首頁  >  問答  >  主體

python小白 問關於匿名函數的問題

第一段程式碼:

#
# -*- 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

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

扔个三星炸死你扔个三星炸死你2685 天前916

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-06-13 09:26:43

    第二段程式碼應該是:

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

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

    回覆
    0
  • 滿天的星座

    滿天的星座2017-06-13 09:26:43

    兩點:

    # -*- 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)

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-06-13 09:26:43

    雷雷

    回覆
    0
  • 取消回覆