lambda表达式可以让你写出优美,简洁的代码.虽然没有接触过Lisp,但是<黑客与画家>列举的事例足以证明函数式编程的强大之处,也更加证明了人月就是一个神话.


Python中的lambda表达式用法之一:


定义一个函数,函数的返回值是一个lambda表达式,


def increment(n):
return lambda x: x + n;

g = increment(10)
f = increment(20)

print g(1)
print f(1)


输出结果


11 21


lambda本身是一个function,也就是说function也可以是一种变量,在java8之前,为了实现类似功能,我们必须首先定义一个接口,然后添加一个方法,通过实现接口来生成不同的功能.转化成java代码,可以看出简洁性弱爆了,显得相当不专业.


public class LambdaTest {
public interface Incrementor {
public int increment(int number);
}
public static void main(String[] args) {
Incrementor f = new Incrementor() {
@Override
public int increment(int number) {
return 10 + number;
}
};

Incrementor g = new Incrementor() {
@Override
public int increment(int number) {
return 20 + number;
}
};

System.out.println(g.increment(1));
System.out.println(f.increment(1));
}
}


幸好java8引入了lambda表达式,可以减少很多冗长的代码,同时增加代码的可读性.


python当中提供了三个内置函数,可以与lambda表达式一起使用


​filter, map, reduce

比如在django的QuerySet结果中只需要某一个字段对应的值,则可以使用一下代码


>>> result = map(lambda user: user.name, UserModel.objects.all())