【Python基础知识库】Python中的高阶函数

高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

  • abs
# Python内置的绝对值函数
a = abs(-10)  # 直接调用abs()函数
f = abs  # 函数本身赋值给变量,即变量指向函数
b = f(-10)

print(a)
print(b)

# 结果
'''
10
10
'''
  • map

map()函数会根据的函数对指定的序列做映射。
map()函数语法:map(function, iterable, ...),其中第一个参数function表示对序列每个元素进行同样的处理的表达式;iterable表示一个或者多个序列。

特别注意,py2返回的是列表,py3返回是一个迭代器。

# 计算平方
def square(x):
    return x ** 2
data_list = [1, 2, 3, 4, 5]
res = map(square, data_list)

# 使用匿名函数
ans = map(lambda x: x ** 2, data_list)

print(res)
print(list(res))
print(ans)
print(list(ans))

# 结果
'''
<map object at 0x0000014F2F0F2A58>
[1, 4, 9, 16, 25]
<map object at 0x0000014F2F32B860>
[1, 4, 9, 16, 25]
'''
  • reduce

reduce()函数会对参数序列中元素进行积累。函数将一个数据集合(链表、元组等)中的所有数据进行下列操作:用穿个reduce中的函数function(有两个参数)相对集合中的第1、2个元素进行操作,得到的结果在于第三个数据继续用function函数进行运算,如此循环迭代,最后得到结果。

reduce()函数语法:reduce(function, iterable[, initializer]),其中第一个参数是function函数,里面有两个参数;第二个参数iterable是可迭代对象;第三个是可选参数,初始参数。

from functools import reduce

# 两数相加
def add(x, y):
    return x + y
data_list = [1, 2, 3, 4, 5]
res = reduce(add, data_list)  # 1+2+3+4+5

# 使用匿名函数
ans = reduce(lambda x, y: x + y, data_list)  # 1+2+3+4+5

print(res)
print(ans)

# 结果
'''
15
15
'''
  • filter

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成的新列表。

filter()函数语法:filter(function, iterable),reduce()接收连个参数,第一个参数function是判断函数,第二个参数iterable是可迭代对象,序列的每个元素作为参数传递给函数进行判断,然后返回True/False,最后将返回True的元素放到新列表中。

# 过滤出列表中所有奇数
def is_odd(n):
    return n % 2 == 1

data_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = filter(is_odd, data_list)

# 使用匿名函数
ans = filter(lambda x: x % 2 == 1, range(1, 11))

print(res)
print(list(res))
print(ans)
print(list(ans))

# 结果
'''
<filter object at 0x000001F3A98EB198>
[1, 3, 5, 7, 9]
<filter object at 0x000001F3A990EB38>
[1, 3, 5, 7, 9]
'''
  • sorted

sort与sorted的区别:

  • sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。
  • list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来的list上进行的操作。

sorted()函数语法:sorted(iterable, key=None, reverse=False),其中iterable是可迭代对象;key主要是用来进行比较元素,只有一个参数,具体的函数的参数是取自于可迭代对象中,指定可迭代对象中的一个元素来排序;reverse是排序规则,默认的是False升序,True为降序。

a = [2, 3, 1, 4, 2, 0, -1]
b = a
c = ['a', 'C', 'A', 'b',  'c', 'B']
d = {1: 'D', 3: 'B', 5: 'A', 4: 'E', 2: 'C'}
e = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
a.sort()

print(a)
print(sorted(b))
print(sorted(b, key=lambda x: x*-1))  # 利用key进行倒序排序
print(sorted(b, reverse=True))  # 利用reverse=True进行倒序排序
print(sorted(b, key=abs))  # 按绝对值大小升序排序
print(sorted(c))  # 字符串排序,按照ASCII大小比较
print(sorted(c, key=str.lower))  # 忽略字符串大小写排序
print(sorted(d))  # 对字典排序默认是对键keys进行排序
print(sorted(d.keys()))  # 对字典按keys值排序
print(sorted(d.items(), key=lambda x: x[0]))  # 还是对字典按keys值排序
print(sorted(d.items(), key=lambda x: x[1]))  # 对字典按键值value排序升序
print(sorted(e,key=lambda x: x[0]))  # 根据姓名升序排序
print(sorted(e,key=lambda x: x[1], reverse=True)) # 根据得分降序

# 结果
'''
[-1, 0, 1, 2, 2, 3, 4]
[-1, 0, 1, 2, 2, 3, 4]
[4, 3, 2, 2, 1, 0, -1]
[4, 3, 2, 2, 1, 0, -1]
[0, -1, 1, 2, 2, 3, 4]
['A', 'B', 'C', 'a', 'b', 'c']
['a', 'A', 'b', 'B', 'C', 'c']
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[(1, 'D'), (2, 'C'), (3, 'B'), (4, 'E'), (5, 'A')]
[(5, 'A'), (3, 'B'), (2, 'C'), (1, 'D'), (4, 'E')]
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值