函数式编程
- 基于lambda演算的一种编程方式
- 程序中只有函数
- 函数可以作为参数,也可以作为返回值
- 高阶函数
- 返回函数
- 匿名函数
- 装饰器
- 偏函数
lambda表达式(匿名函数)
-
一个函数体相对简单的表达式
-
不是代码块,仅仅是一个表达式,没有return
-
可以有参数,多个参数也可以,逗号隔开
-
lambda开头,参数与函数体用冒号隔开
-
用法:
stm = lambda x: 100 * x stm(89)
stm = lambda x: 100 * x
stm(89)
8900
高阶函数
- 将函数作为参数使用的函数
- 依据:函数名称就是一个变量
def fun1(n):
return n*100
def fun2(n,f):
return f(n)*3
fun2(9,fun1)
2700
系统常用高阶函数:
- map:遍历list返回操作后的副本,不改变原数据
- reduce:归并list返回结果,不改变原数据
- filter:过滤list返回操作后的副本,不改变原数据
- sorted:自定义排序规则,对list排序返回操作后的副本,不改变原数据
- zip:将两个可迭代列表一一对应生成一个可迭代的元素类型为tuple的列表
- enumerate:对可迭代列表的每个元素添加索引,生成一个可迭代的元素类型为tuple的列表
返回函数
- 函数可以返回具体的值,也可以返回一个函数作为结果
闭包
- 语法上等同于JavaScript的闭包
- 常见的坑:存在类似于JavaScript的闭包的坑——var定义的i使用变成最后一个值的问题
装饰器
- 对已有函数的功能进行扩展,但不能改变原有的函数
- 本质上就是一个返回函数的高阶函数
- 使用:
使用@语法 - 好处:可以装饰任何函数,可以直接把装饰器的功能添加过来
def hello(f):
def hi(*args, **kwargs):
print("hello")
return f(*args, **kwargs)
return hi
@hello
def word():
print("word")
word()
hello
word
偏函数
- 参数固定的函数,相当于一个有特定参数的函数
- functools.partial的作用是,把一个函数某些参数固定,返回一个新的函数
# 字符串转化成十进制数字
int("12345")
12345
int("12345",base=16)
74565
import functools
# 实现16进制的int()
int16 = functools.partial(int,base=16)
int16("12345")
74565