python基础学习-- 高阶函数
# Python内建了map()和reduce()函数。and so on... # 一、map()函数接受两个参数 一个是函数 一个是iterable, map将传入的函数依次作用到序列的每一个元素,并把结果作为新的iterator返回 作用和php的array_map()类似 # 比如我们要求一个list中的每一项的平方 def f(x): return x * x r = map(f, [1, 2, 3, 4, 5]) print(list(r)) # map()传入的第一个参数是f()。由于结果r是一个iterator,是一个惰性序列,因此通过list函数让他吧整个序列都计算出来并返回一个list # 或许你会说:不需要map函数,写一个循环也可以计算出结果(我也是这么想的) L = [] for n in [1, 2, 3, 4, 5]: L.append(f(n)) print(L) # 但是从上面的代码中你可以一眼看明白"把f(x)作用到list的 每一个元素中并把结果生成为一个新的list吗" (我觉得没差别哎 不过代码确实是精简了) # 所以 map作为高阶函数 事实上他把运算规则抽象化了 因此 我们不但可以计算简单的f(x) = x * x 还可以计算任意复杂的函数 # 二、reduce()接收的参数同map函数 作用是把结果继续和序列的下一个元素做累计计算 reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 其作用和php的array_reduce()类似 # 三、python内建的filter函数用于过滤序列 filter()把传入的函数依次作用于每一个元素 然后根据返回值是true还是false决定是保留还是丢弃该元素 def is_odd(i): return i % 2 == 1 print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7]))) # 四、python内置的sorted()函数可以用来对list进行排序 print(sorted([1, 2, 3, 4, 10, 8])) # sorted()也是一个高阶函数 它也可以接受一个key函数来实现自定义排序 比如按绝对值大小排序 print(sorted([1, -1, 2, -3, 4, -7, 10], key=abs)) # 字符串的比较默认是按照首字母的ascii码值进行比较 # 如果需要进行反向排序,可以传入第三个参数reverse=True print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True))
今天学习的内容有些少。。