课程名称:Python3 进阶教程(新版)
章节名称:第8章 Python的函数式编程
讲师名称:咚咚呛
课程内容
- 函数式编程
- 把函数作为参数
- map()函数
- reduce()函数
- filter()函数
- sorted()函数
学习收获
函数式编程
函数是逻辑功能的单位,函数式是一种编程范式。函数不等于函数式,计算不等于计算机。
函数式编程的特点:
- 把计算视为函数而不是指令
- 代码简洁,容易阅读,容易理解
- 纯函数式编程:不需要变量,测试简单
python的函数式编程的特点:
- 不是纯韩式是编程:允许有变量
- 支持高阶函数:函数可以作为变量
- 支持闭包:可以返回函数
- 支持匿名函数
把函数作为参数
import math
def add(x,y,f):
return f(x)+f(y)
print(add(4,25,math.sqrt))
map 函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f依次作用在list的每个元素上,map()函数会返回一个迭代器,可以依次迭代得到原来list的元素被函数f处理后的结果。
names = ['alice', 'BOB', 'CanDY']
def firstToUpper(name):
return name[0].upper() + name[1:].lower();
l = map(firstToUpper,names)
print(l)
reduce 函数
和map函数一样,reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map() 类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。educe()还可以接收第3个可选参数,作为计算的初始值。
在python2中,reduce()函数和map()函数一样,可以直接使用,但是在python3中,reduce()函数被收录到functools包内,需要引入functools才可以使用。
def mul(x,y):
return x * y
print(reduce(mul,[1,2,3]) # ==> 6
print(reduce(mul,[1,2,3],4)) # ==> 24
filter 函数
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,并返回一个迭代器,可以迭代出所有符合条件的元素。
import math
def filter_num(num):
return int(math.sqrt(num)) * int(math.sqrt(num)) == num
l = range(1,101);
print(filter(filter_num,l))
sorted 函数
sorted()函数可对list进行排序,当list的每一个元素又是一个容器时,则会以第一个元素来排序。
sorted接受key参数,用来指定排序的字段,key的值是一个函数,接受待排序列表的元素作为参数,并返回对应需要排序的字段。
如果需要倒序,指定reverse参数即可。
sorted(score, key=k, reverse=True)
举个例子:
# 实现忽略大小写排序的算法
def sort_by_key(item):
return item[0].lower()
l = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(l,key=sort_by_key))