Python基础---高阶函数
高阶函数
高阶函数map、reduce、filter
一、map()
Python内建函数之一;
map(func, Iterable) Iterable:n. 迭代器
作用:将func函数依次作用于Iterable的每个元素上,返回一个新的Iterable
1 def func(n): 2 m = n ** 2 3 return m 4 5 6 num = [1, 2, 3, 4, 5, 6] 7 new_num = map(func, num) 8 print(list(new_num)) # map的结果是Iterable,Iterable是一个惰性序列,需要list()让该Iterable把结果计算出来,并返回一个list
9 --->[1, 4, 9, 16, 25, 36]
二、reduce()
Python内建函数之一;
fron functools import reduce
reduce(func, sequence) sequence:n.序列
作用:将func函数作用于序列元素上的值,作用于下一个元素,做累计计算,但是func函数必须要有两个参数
1 from functools import reduce 2 3 4 def func(x, y): 5 return x * y 6 7 8 num = [1, 2, 3, 4, 5] 9 new_num = reduce(func, num) 10 print(new_num) 11 --->120
三、filter()
Python内建函数之一;
filter(func, Iterable)
作用:将func函数作用于Iterable的每个元素上,根据返回值True或False,决定保留还是丢弃该元素
起到过滤序列的作用
1 def func(n): 2 return n % 2 == 1 3 4 5 num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 6 new_num = filter(func, num) 7 print(list(new_num)) 8 --->[1, 3, 5, 7, 9]
1 def is_palindrome(n): # 筛选出范围内的回数(回数:正反都相同的数字) 2 if str(n)[:: -1] == str(n): 3 return n 4 5 6 output = filter(is_palindrome, range(1, 200)) 7 print(list(output)) 8 --->[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]
匿名函数:
一种简介格式的函数,属于表达式的类型,使用lambda关键字表示匿名函数
匿名函数只能存在一个表达式;
因为没有函数名字,所以不需担心命名冲突,也可以把匿名函数赋值给一个变量,利用变量来调用该函数
简单、快捷,但是功能受限
基本格式:
lambda 参数1,参数2... : 表达式
1 m = lambda x, y: x + y 2 print(m) 3 ---><function <lambda> at 0x05347810>
带分支格式:
lambda 参数1,参数2... : 值1 if 表达式 else 值2
分支结构只能使用双向分支,且不支持循环代码
1 a = map(lambda x: 'True' if x % 2 == 1 else 'False', range(0, 5)) 2 print(list(a))
3 ['False', 'True', 'False', 'True', 'False']
调用函数格式:
lambda 参数1,参数2... : other_func()
1 some = [1, 'a', ('a',), {1: 'c'}, []] 2 x = map(lambda x: type(x), some) 3 print(list(x)) 4 --->[<class 'int'>, <class 'str'>, <class 'tuple'>, <class 'dict'>, <class 'list'>]
偏函数:
作用:将一个函数的某些参数固定,即设置默认值,返回一个新的函数,调用这个新函数会更简单
functools.partial(func, *args, **keywords)
1 import functools 2 3 4 def num(x, y, z): 5 return x * y * z 6 7 8 num2 = functools.partial(num, z=3) # 利用偏函数,设置z参数默认值,新建了num2函数,在调用函数时,可以不用输入z参数 9 print(num2(2, 3)) 10 --->18
返回函数:

浙公网安备 33010602011771号