python小白 问关于匿名函数的问题
问题描述
第一段代码:
# -*- coding:gb2312 -*-def test(a,b,funC): result = funC(a,b) return resultfunC = 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 resultfunA = eval(input('请输入函数'))funB = 'lambda x,y:'funC = eval(funB)+funCnum = test(11,22,funC)print(num)
改成之后,我运行程序:

结果报出如下错误。一下子没看懂,不知道这里是什么意思。我想问,为什么我这样改不行呢?第一段代码当中的:
funC = eval(input('请输入函数')) #运行时输入:lambda x,y:x+y
和第二段代码当中的:
funA = eval(input('请输入函数')) #运行时输入:x+yfunB = 'lambda x,y:'funC = eval(funB)+funC
这两段代码不应该是等价的么?为什么前者可以顺利执行,后者会报错?
问题解答
回答1:第二段代码应该是:
strA = input('请输入函数')strB = 'lambda x,y:'funC = eval(strB+strA)
你输入的不是函数不是函数不是函数,输入的是字符窜。eval这个函数的作用是把你输入的字符串当成python代码来执行
回答2:两点:
# -*- coding:gb2312 -*-def test(a,b,funC): result = funC(a,b) return resultfunA = input('请输入函数') #这儿改成 input('请输入函数')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('请输入函数'))num = test(11,22,funC)print(num)
相关文章:
1. css - flex换行后如何设置行距?(direction:row+warp:warp)2. c++ - websocket通信,收到的消息不完整的问题3. javascript - js一个call和apply的问题?4. javascript - 请问div是个链接,鼠标移上去能出现一个div,比如查看更多按钮,怎么做?5. angular.js - angular如何获取一段html代码赋值到另一个地方,html里面的ng-click事件还要能生效?6. mysql - sql数据还原7. javascript - 求帮助 , ATOM不显示界面!!!!8. nginx - 使用wordpress搭建博客,怎么实现真实服务器使用HTTP,然后使用UPYUN的HTTPS加密?9. html5和Flash对抗是什么情况?10. javascript - js中递归与for循环同时发生的时候,代码的执行顺序是怎样的?

网公网安备