Python - 高阶函数

什么是高阶函数?

接收函数作为参数或者返回把函数作为结果返回的函数称为高阶函数

zip

内置的zip函数接收多个序列为参数,并行遍历这些序列,并将其组合为多个元组,一般与list配合使用
内置说明 : zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.
注意:
zip() 返回的对象为可迭代

  1. zip()
>>> L1 = [1, 2, 3]
>>> L2 = [4, 5, 6]
>>> print(type(zip(L1,L2)))
<class 'zip'>

>>> print(zip(L1,L2))
<zip object at 0x000002727E9FD900>

>>> print(list(zip(L1,L2)))
[(1, 4), (2, 5), (3, 6)]

# 与for 循环结合使用
>>> for (x,y) in zip(L1,L2):
...     print(f"{x} {y} --- {x+y}")
...
1 4 --- 5
2 5 --- 7
3 6 --- 9


# 当参数长度不同时,zip会以最短序列的长度为准来截断所得到的元组
>>> S1 = 'abc'
>>> S2 = 'xyz123'
>>> list(zip(S1,S2))
[('a', 'x'), ('b', 'y'), ('c', 'z')]


# 将两个list 构造为字典
>>> keys=['java','python','c']
>>> valus=[1,2,3]
>>> D={}
>>> for (k,v) in zip(keys,valus):
...     D[k] = v
...
>>> D
{'java': 1, 'python': 2, 'c': 3}

enumerate

>>> str_1 = 'abcdefg'
>>> for (index,item) in enumerate(str_1):
...     print(index,item)
...
0 a
1 b
2 c
3 d
4 e
5 f
6 g


>>> str_2 = 'abcdefg'
>>> for index,item in enumerate(str_2, 1):    # 索引从1开始
...     print(index,item)
...
1 a
2 b
3 c
4 d
5 e
6 f
7 g

map

map函数会对一个序列对象的每一个元素传入一个函数,返回一个包含了所有函数调用结果的列表


>>> counters = [1,2,3,4]
>>> list(map(inc,counters))
[11, 12, 13, 14]

匿名函数:lambda

作用于def 一样,定义一个函数,并返回该函数
形式:lambda argument1,argument2,...argumentN :expression using arguments

  • lambda 是一个表达式,而不是一个语句
    因此lambda 能够出现在Python语法不允许def 出现的位置,例如在一个列表常量中或者函数调用的参数中,lambda 返回一个值(一个新的函数)
    可以选择性赋值给一个变量
  • lambda 的主体是一个表达式而不是一个代码块
    仅能够在lambda 主体中封装有限的逻辑进去,不能使用if。它限制了程序的嵌套,lambda是为编写简单函数而设计的,def用来处理更大的任务

# 赋值给变量
>>> f = lambda x,y,z : x+y+z
>>> f(2,3,4)
9
>>>

# 默认参数也能够在lambda 参数中是使用
>>> x = (lambda a='hello', b= 'you', c='me' : a+b+c)
>>> x("hi")
'hiyoume'


# 返回函数,推迟函数的执行
>>> def action(x):
...     return lambda y : x+y
...
>>> act = action(99)
>>> act(1)
100

lambda 应用 - 排序

"""
# 在实际应用场景中, 更多的是将匿名函数作为其他函数的参数来使用
"""

# key = lambda x: x['age']
#
# print(key({'name': '张三', 'age': 22, 'title': '测试工程师'}))


# 按age进行排序
user_list = [
    {'name': '张飞', 'age': 22, 'title': 'JVA'},
    {'name': '刘备', 'age': 24, 'title': 'Pyhton'},
    {'name': '关羽', 'age': 21, 'title': 'C#'}
]

user_list.sort(key=lambda x: x['age'])
print(user_list)

函数式编程

函数市编程:对序列应用一些函数的工具 ,map函数是用来进行函数式编程工具中最简单的内置函数代表

filter

filter: 基于某一测试函数过滤出一些元素

>>> list(filter((lambda x : x >1),range(-5,5)))
[2, 3, 4]

reduce

reduce: 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
注意:
Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:

>>> reduce((lambda x,y : x+y),[1,2,3,4,5])
15
posted @ 2022-01-03 11:58  chuangzhou  阅读(40)  评论(0编辑  收藏  举报