Python 中的函数式编程

函数式编程的需求(FP)

函数式编程的使用为我们提供了关注点的分离,在这里我们可以分离数据和逻辑。因此,对于开发人员来说,代码变得清晰易懂。函数式编程遵循 DRY (请勿重复)原则。遵循函数式编程的代码是节省内存的,实现函数式编程的代码库也很容易扩展和维护。

纯函数

函数式编程中的重要概念之一是纯函数的使用。

如果满足以下条件,则将一个函数称为“纯函数”:

  1. 变量都只在函数作用域内获取,作为函数的参数传入

  2. 不会产生副作用,不会改变被传入的数据或者其他数据(全局变量)

  3. 相同的输入保证相同的输出

副作用是指函数被调用,完成可函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度的改变了系统环境。

考虑下面这个简单的例子:

函数平方永远只返回给定数字的平方,不会改变外部世界的任何东西。这种类型的函数也称为声明函数。

Python 中的纯函数:

1) map()

map()接受两个参数:一个函数和一个可迭代对象。考虑到上面的square函数的例子,我们可以使用map()函数将函数快速应用于给定的可迭代对象,例如数字列表:

输出:

[4, 36, 100]

map()函数最常见和有用的用例是从用户那里接收多个未知数字的输入:

输出:

Enter some numbers: 2 5 3 7 4
Check your numbers: [2, 5, 3, 7, 4]

2) filter()

filter()函数基于指定函数过滤任何给定的可迭代对象。考虑以下示例,其中filter()函数仅过滤满足给定only_even()函数条件的项目。

输出:

[2, 4, 6, 8, 10]

3) zip()

当我们需要逐字压缩两个可迭代对象时,可以使用zip()函数。我们可以在zip()函数内添加任意数量的可迭代对象。考虑下面的例子:

输出:

[('Iron Man', 'Batman'), ('Spider-Man', 'Superman')]

函数将对应的索引项绑定到一个元组中,并插入到一个列表函数中(正如我指定的 list()函数)。

4) reduce()

Reduce()函数是一个 functools 模块的一部分,它是一个标准的 python 库。考虑下面的示例,其中 reduce()函数累积给定的列表值并提供最终输出。

输出:

9

与其他函数不同,reduce()函数接受三个参数。从这个例子中,您可以看到这个函数的 collect()接受两个参数 acc 和 item,并返回和。

在这里,reduce() 函数首先将最后一个参数0作为 acc 传递给列表中的第一项,然后将其作为列表中的第一项传递,然后它累加并传递总和作为下一个列表项的 acc,依此类推,直到所有列表项都被累加并且结果显示。

总结

比起命令式编程,函数式编程更强调程序执行的结果而非执行的过程,倡导利用简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。使程序变得简单易读易于维护。

·  END  ·

HAPPY LIFE

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值