首页  >  问答  >  正文

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 天前915

全部回复(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
  • 取消回复