lambda parameter:expression
其中lambda是声明一个匿名函数,parameter是这个函数有参数,可以有多少,中间用逗号隔开,expression是正则表达式
def compute(a,b,func): result = func(a,b) return result num = compute(11,12,lambda x,y:x+y) print(num)
方法compute有三个参数,从封装的代码中可以看到,compute把第三个参数用函数传入,再看代码的第四行,表达式是x+y,所以func参数的内容就是x+y,且需要传入两个参数分别为x,y,再看看第二行代码中传入两个参数是a,b,那么result = a + b,因为a = 11,b = 12,所以result等于23,所以num等于23,打印结果也就是23
下面做一下延伸:
def compute(a,b,func): result = func(a,b) return result func_new = input("请输入一个匿名函数:") num = compute(11,12,func_new) print(num)
上面的代码就是说让我们输入一个函数,这样的话,你想让它实现加法,它就加法。想让它实现减法就实现减法。
不过它只能在2.7版本才可以用上面的代码,3.6的话就不行,因为input会把你输入的值都变成客串,也就是"lambda x,y:x+y",你让一个字符串去实现这个,不是搞笑吗?这时候我们就可以用到eval函数,这个函数很强大。它可以去除这字符串,让它变成一个可以被调用的函数,如下代码
def compute(a,b,func): result = func(a,b) return result func_new = input("请输入一个匿名函数:") func_new = eval(func_new) num = compute(11,12,func_new) print(num)
本文出自 “爱周瑜” 博客,请务必保留此出处http://izhouyu.blog.51cto.com/10318932/1967315
原文:http://izhouyu.blog.51cto.com/10318932/1967315