python入门第十七节常用的高级函数

本文详细介绍了Python中的三个常用高级函数:filter用于根据条件筛选元素,map用于对序列进行逐个操作并返回新序列,reduce则用于累积计算。通过实例演示了如何使用这些函数以及它们在实际编程中的作用。
摘要由CSDN通过智能技术生成

常用的高阶函数

  • 定义:参数或返回值为其他函数的函数

filter(function, iterable)

  • function:函数(function 必需能够接受1个实参),也可以为 None
  • iterable:可迭代对象
  • 将 iterable 中每个元素作为参数传递给函数,根据函数的返回结果进行判断 True或 False,将判断为 True 的 iterable 中的元素构建新的迭代器并返回
  • 如果 function 为 None,直接判断 iterable 中元素 True 或 False,再返回为 True的元素构建的新的迭代器
object1 = filter(lambda x: x-1, [1, 2, 3, False, 4])
print(list(object1))
object3 = filter(None, [1, 2, 0, 3, False, 4])
print(list(object3))

map(func, *iterables)

  • func:函数(func 必需能够接收 iterables 个数的实参)
  • iterables:可迭代对象
  • 用 iterables 中的每个元素作为函数的参数来调用函数,以迭代器形式返回所有结果
  • 当有多个 iterables 对象时,最短的 iterables 耗尽则函数停止
def square(a):
return a**2

result = map(square, [1, 2, 3])
print(list(result))

result = map(lambda a: a**2, [1, 2, 3])
print(list(result))

result = list(map(float, ["1", "2", "3"]))
print(result)

# 类似于zip的取元素方式
result = list(map(lambda x, y, z: x+y+z, [1, 2, 3], [3, 2, 1], [1,3, 2]))
print(result)

# 当有多个 iterables 对象时,最短的 iterables 耗尽则函数停止
result = list(map(lambda x, y, z: x+y+z, [1, 2, 3], [3, 2, 1], [1,3]))
print(result)

reduce(function, iterable[, initial])

  • function:函数(function 必需能够接收两个实参)
  • iterable:可迭代对象
  • initial:初始值
  • 在 Python2 中 reduce() 是内置函数,而在Python3中 reduce() 函数是在functools模块中的,所以在使用的时候需要先导入 functools 模块
  • 在没有指定 initial 参数时,先把 iterable 的前两个元素作为参数调用函数,把这次函数的结果以及iterable 的下一个元素又作为参数再调用函数,以此类推
  • 在指定 initial 参数时,先把 initial 值和 iterable 的第一个元素作为参数调用函数,把这次函数的结果以及 iterable 的下一个元素又作为参数再调用函数,以此类推
  • 如果iterable为空,返回initial,此时如果没有指定initial,则报错
  • 如果iterable只有一个元素且没有指定initial,返回该元素
from functools import reduce


def add(m, n):
	s = m + n
	return s


# 过程:[(1+2)+3]+4 = 10
result = reduce(add, [1, 2, 3, 4])
print(result)

# 过程:2*[2*(2*5+1)+2]+3 = 51
result = reduce(lambda x, y: 2*x + y, [1, 2, 3], 5)
print(result)

# iterable为空,返回initial
result = reduce(lambda x, y: 10*x + 2*y, [], 123)
print(result) # 123
# iterable只有一个元素且没有指定 initial,返回该元素
result = reduce(lambda x, y: 10*x + 2*y, [123])
print(result) # 123

# 过程:10*2 + 2*123 = 266
result = reduce(lambda x, y: 10*x + 2*y, [123], 2)
print(result)
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙_尧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值