python之匿名函数lambda

lambda parameter:expression

其中lambda是声明一个匿名函数,parameter是这个函数有参数,可以有多少,中间用逗号隔开,expression是正则表达式

1
2
3
4
5
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

下面做一下延伸:

1
2
3
4
5
6
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函数,这个函数很强大。它可以去除这字符串,让它变成一个可以被调用的函数,如下代码

1
2
3
4
5
6
7
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)


本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1967315

上一篇:erlang 自定义函数的初步应用


下一篇:dede 调用自定义函数 实现 当前栏目高亮显示