高阶函数使用 —-函数式编程
Python 函数的参数可以是:字符串,整数 …普通的变量, 但 Python 函数的参数还能是一个函数
,返回值
也能是一个函数
。
函数作为参数
函数 fun()
接受一个 函数f
作为参数
首先定义一个主函数
函数的第一个参数需要传入一个函数
def fun(f, a:int, b:int ): return f(a) + f(b)
定义参数函数,只是简单的返回参数
def f(num): return num
使用主函数
print(fun(f, 1, 2)) ------------------- 3
函数作为返回值
定义返回值函数
f()
def f(num): return num **num
定义主函数
fun()
,直接返回f()
函数
def fun(): # 不能加 括号,带括号就是 调用 return f
使用主函数
第一个括号调用 fun()
函数,第二个括号调用返回的函数
foo = fun() print(foo) # 一个函数 print(foo(2)) # 合并写法 print(fun()(2)) --------------- <function f at 0x000001FD81A62268> 4 4
内置的高阶函数
sort() 排序
普通排序使用
list = [1,5,6,8,7,6,5,5,2] list.sort(reverse=True) # 降序 print(list) --------------------------- [8, 7, 6, 6, 5, 5, 5, 2, 1]
高级使用 —按照指定规则排序
按照十位数的大小排序
# 作为参数的函数 def fun(num): return str(num)[0] list = [11,51,61,82,72,64,52,512,21] list.sort(key=fun,reverse=True) print(list) ------------------------------------ [82, 72, 61, 64, 51, 52, 512, 21, 11] # 使用匿名函数合并 list = [11,51,61,82,72,64,52,512,21] list.sort(key=lambda num: str(num)[0],reverse=True) print(list) ------------------------------------ [82, 72, 61, 64, 51, 52, 512, 21, 11]
map() & filter()
函数编程语言通常都会提供map
, filter
, reduce
三个高阶函数。
在Python3中, map
和 filter
仍然是内置函数, 但是由于引入了列表推导
和生成器表达式
, 他们变得没有那么重要了。
列表推导
和生成器表达式
具有了 map
和 filter
两个函数的功能, 而且更易于阅读。
map
生成新的迭代类型
list_m = map(lambda num : num ** 2,[1,2,3,4,5,6,7]) print(list(list_m)) print(type(list_m)) ------------------- [1, 4, 9, 16, 25, 36, 49] <class 'map'>
列表推导 实现 map()
list_m = [num ** 2 for num in [1, 2, 3, 4, 5, 6, 7]] print(list_m) ------------- [1, 4, 9, 16, 25, 36, 49]
同时迭代多个
list
,生成新的迭代类型
的长度是最短list的长度
list1 = [10,20,30,40] list2 = [1,2] list_m = map(lambda a,b:a+b,list1,list2) print(list(list_m)) ------------------- [11, 22]
注意
列表推倒中这里是使用的笛卡尔积
list1 = [10,20,30,40] list2 = [1,2] list_m = [a + b for a in list1 for b in list2] print(list_m) ------------- [11, 12, 21, 22, 31, 32, 41, 42]
filter 过滤
filter 参数函数的返回值需要是 布尔值
list_m = filter(lambda num :num%2,[1,2,3,4,5,6,7]) print(list(list_m)) ------------------- [1, 3, 5, 7]
列表推导 实现 filter()
list_m = [ num for num in [1,2,3,4,5,6,7] if num%2 == 1] print(list_m) ------------- [1, 3, 5, 7]
reduce
Python3 中 reduce 被移动到了 functools 模块中
from functools import reduce
用法 两两做运算
from functools import reduce num = reduce(lambda a,b: a+b,[1,2,3,4,5,6,7],0) # 0 为 a 的初始值 print(num) ---------- 28
版权声明:《 Python 高阶函数使用 》为明妃原创文章,转载请注明出处!
最后编辑:2020-4-7 09:04:24