一、概述
Python是一门多范式的编程语言,它同时支持过程式、面向对象和函数式的编程范式。因此,在Python中提供了很多符合 函数式编程 风格的特性和工具。
二、lambda表达式(匿名函数)
除了 函数 中介绍的 def语句,Python还提供了另外一种定义函数的方法: lambda表达式。
lambda表达式的语法如下:
lambda [arguments]: expression
与def语句类似,lambda表达式创建的函数:
- 也是可调用对象(接受0个或多个参数,返回一个值)
- 也是一等公民(first-class)
- 也支持嵌套定义(def中的lambda,或lambda中的lambda)
但是lambda表达式与def语句之间,也存在很多显著的差异:
差异点 | 函数(lambda表达式) | 函数(def语句) |
---|---|---|
函数体 | 只能是单行表达式(expression) | 可以是任意复杂的语句(statement) |
函数返回值 | 返回值就是函数体中的表达式的求值结果 | 由函数体中的return语句指定 返回值 |
函数名 | 定义后直接返回函数对象(匿名函数) | 定义后自动为函数对象绑定函数名 |
函数定义位置 | 可以在任何允许函数对象出现的位置定义(支持即时定义,即时调用) | 只能在允许语句出现的位置定义(先定义,后调用) |
用途 | 多用于一次性使用的简单函数 | 适用于一切函数和类方法 |
以下是lambda表达式的简单示例:
# def语句
>>> def func(x, y): return x + y # 自动绑定函数名为func
...
>>> func
<function func at 0xb76eff7c>
>>> func(1, 2) # 先定义,后调用
3
# lambda表达式
>>> lambda x, y: x + y # 匿名函数(直接返回函数对象)
<function <lambda> at 0xb76ef0d4>
>>> (lambda x, y: x + y)(1, 2) # 即时定义,即时调用
3
>>> f = lambda x, y: x + y # 手动绑定函数名
>>> f(1, 2) # 也可以先定义,后调用
3
>>>
>>> ((lambda x: (lambda y: x + y))(1))(2) # 嵌套定义的lambda(较复杂,尽量避免)
3
三、内建函数filter()、map()、reduce()
1、filter()
函数原型:filter(function, iterable)
说明:返回