python函数式编程
笔记整理自:
- https://blog.csdn.net/Solo95/article/details/78834041
https://www.liaoxuefeng.com/wiki/1016959663602400/1017329367486080
高阶函数:可以把函数作为参数传入,变量可以指向函数,eg. f=abs;传入函数def add(x, y, f): return f(x)+f(y)
Map
惰性序列:Python的惰性序列多数指Iterator,意思是表达式和变量绑定(比如:调用iter()得到了一个iterator并赋值给一个变量)后不会立即进行求值,而是当你用到其中某些元素的时候才去求某元素对的值(比如next()访问到某元素才去实际计算某元素的值)。你不主动去遍历它,就不会计算其中元素的值。
意义:- 可以实现无限序列的表示,且不需要再内存中计算出所有的自然数
在大规模数据处理中起到延迟计算的作用,把计算步骤延迟到了要实际使用该数据的时候
map传入两个参数,map(函数,Iterale),将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。Reduce
reduce(函数, Iterable)中传入的函数对参数学列中的元素进行累计
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
练习:
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
def normalize(name): name = name[0].upper()+name[1:].lower() return name # 测试: L1 = ['adam', 'LISA', 'barT'] L2 = list(map(normalize, L1)) print(L2)
利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:
def str2float(s): index = s.index('.') return reduce(lambda x, y:x*10+y, map(lambda x:int(x), s[:index]))+reduce(lambda x, y:x*0.1+y, map(lambda x:int(x), reduce(lambda x, y: y+x, s[index+1:])))*0.1