L11-Python中的高阶函数的使用

Python中的函数是一个对象,既可以作为输入参数,也可以作为返回结果。在这里聊聊几个常用的高阶函数,来看看函数是如何被作为输入参数/返回结果来使用的。

1、map() 映射函数

语法:map(function,Iterator)
function指函数名称,Iterator指一个可迭代对象如列表。

用途:遍历Iterator中的每一个元素,执行函数function

# 直接使用lambda 临时函数
items=[1, 3, 9, 10]
list(map(lambda x:x+1, items))
# 先定义函数,再传入函数名
def plus1(x):
    x += 1
    return x
# 注:这里是 plus1 而不是 plus1() 
list(map(plus1, items))

2、reduce() 规约函数

用途:reduce() 函数会对参数序列中元素进行累积。

执行过程:
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

def sumTotal(x,y):
    return x + y

from functools import reduce
# 
print(reduce(sumTotal,items))
# 直接传入lambda函数
print(reduce(lambda x,y:x+y,items))

3、filter() 过滤函数

用途: 用来过滤序列

调用方式:
filter(函数名,对象名)把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

返回值:
是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list

def is_odd(n):
    return n % 2 == 1

# 查看返回类型,是一个filter对象
type(filter(is_odd, [1, 3, 4, 9]))
# <class 'filter'>

# 用list()输出
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

#%% 去掉序列中的空字符串
def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))

4、sorted() 排序函数

既可以使用默认的升序,也可以通过传入函数来实现自定义排序

# 默认按升序
print(sorted([36, 5, -12, 9, -21]))
# [-21, -12, 5, 9, 36]

# 传入函数,按绝对值升序
print(sorted([36, 5, -12, 9, -21], key=abs))
# [5, 9, -12, -21, 36]

# 忽略大小写
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower))

#%% 反向排序
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章