课程名称:Python3 进阶教程(新版)
章节名称:第8章 Python的函数式编程
讲师名称:咚咚呛
函数是逻辑功能的单位,函数式是一种编程范式。函数不等于函数式,计算不等于计算机。
函数式编程的特点:
python的函数式编程的特点:
import math def add(x,y,f): return f(x)+f(y) print(add(4,25,math.sqrt))
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)
和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()函数接收一个函数 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()函数可对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))