函数式编程
1 高阶函数
函数名也是变量,可以指向其他变量(变量可以指向函数)
f = abs
abs() = = f()
高阶函数:函数的参数可以是函数(函数可以接收另一个函数)
函数式编程就是指这种高度抽象的编程范式
2 map()
map传入两个参数,一个函数(只能接收一个参数?),一个Iterable,生成Iterator(Iterator是惰性序列,需用list将其计算出来)
def f(x): return x*x list(map(f,[1,2,3]))
3 reduce()
接收一个函数和一个序列,函数必须接收两个参数,
reduce(f,[x1,x2,x3]) = f(f(x1,x2),x3)
1 from functools import reduce 2 digits = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} 3 def char2num(s): 4 return digits[s] 5 #map(char2num,"123456") 6 def fn(x,y): 7 return x*10+y 8 print(reduce(fn,map(char2num,"12345678"))+1)
name.title()首字母大写
4 filter
接收一个函数和一个序列,将传入的函数依次作用于元素,根据返回值是True还是False判断是否保留该元素
filter返回的是一个Iterator 惰性序列,需要用list()将其计算出来
def is_palindrome(x): return str(x) == str(x)[::-1] list(filter(is_palindrome,list(range(0,100))))
函数中只有一个参数,需要代入列表的元素,则传入函数名即可
只要返回的值是true则保留该值
5 sorted
将列表元素进行排序
sorted([1,2,3,4,1,1,4,14],key = abs)
key提供一个函数接入来自定义排序规则,先在函数中计算,将返回值排序,并对应至原列表
sorted对字符串排序默认按照ASCII码大小进行排序
str.lower将字符串变成小写,再加以排序
反向排序则传入第三个参数 reverse=True
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t): return t[0].lower() sorted(L,key = by_name)
6 返回函数
内部函数计算,外部函数返回内部函数
7 匿名函数
lambda 参数 : 表达式
直接返回表达式计算的值
def build(x,y): return lambda : x*y f = build(2,3) f()
lambda 可以引用局部变量
8 装饰器
9 偏函数
把函数的某些参数固定住
import functools in2 = functools.partial(int,base = 2)