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

 

返回函数:

  

  

 

posted @ 2018-02-28 22:15  风缘  阅读(241)  评论(0)    收藏  举报