文章插图
在这篇10分钟的文章中,您将学习Python中的函数式范型 。您还将学习列表推导式 。
目录
- 函数式范式
- Python的map函数是如何运行的
- Python中的lambda表达式
- Python中的reduce函数
- filter函数
- Python中的高阶函数
- 带有函数的部分应用
- 函数编程不是Python化
- 列表推导式
- 任何可迭代对象的推导式
- 结论
在函数式编程范式中,我们不告诉计算机去做什么,而是告诉它是什么东西 。一个数的最大公约数是什么,等等 。
变量不会变化 。一旦我们设置了一个变量,它就会永远保持这种状态 。因此,函数在函数式范型中没有副作用 。副作用就是函数改变了它外部的东西 。让我们来看一个例子:
文章插图
输出是5 。在函数式范型中,改变变量是一个很大的禁忌,而让函数影响它们范围之外的东西也是一个大大的禁忌 。函数唯一能做的就是计算某些东西并返回它 。
现在您可能会想“没有变量,就没有副作用?为什么这很好?”问得好,读这篇文章的古怪陌生人 。
如果一个函数使用相同的参数被调用两次,那么它肯定会返回相同的结果 。如果您学过数学函数,您就会喜欢这一点 。我们称之为函数的引用透明性 。由于函数没有副作用,如果我们构建一个计算程序,我们就可以加快该程序的速度 。如果程序知道func(2)等于3,我们可以将其存储在一个表中 。这将防止程序在我们已经知道答案的情况下去运行相同的函数 。
通常,在函数式编程中,我们不使用循环,我们使用递归 。递归是一个数学概念,它意味着“自食其力” 。对于递归函数,该函数将自己作为一个子函数进行调用 。下面是Python中递归函数的一个很好的例子:
文章插图
一些编程语言也很懒 。这意味着他们直到最后一秒才开始计算或做任何事情 。如果我们编写一些代码来执行2 + 2,一个函数式程序只会在我们需要使用结果时才会计算这个结果 。我们很快就会探讨Python中的惰性 。
Python的map函数是如何运行的为了理解映射,让我们首先看看什么是可迭代对象 。一个可迭代对象是我们可以迭代的任何东西 。这些是列表或数组,但是Python有许多不同的可迭代对象 。我们甚至可以通过实现魔术方法来创建我们自己的可迭代对象 。一个魔术方法就像一个API,它可以帮助我们的对象变得更Python化 。要使一个对象成为一个可迭代对象,我们需要实现2个魔术方法:
文章插图
第一个魔术方法是__iter__,或者叫特殊iter(双下划线)方法,它会返回迭代对象,我们通常在循环开始时使用它 。特殊next方法,__next__,会返回下一个对象是什么 。
让我们来看看这个:
文章插图
这将输出:
文章插图
在Python中,迭代器是一个对象,它只有一个简单的__iter__魔术方法 。这意味着我们可以访问该对象中的位置,但不能遍历该对象 。有些对象有魔术方法__next__,但没有__iter__魔术方法,如sets(将在本文后面讨论) 。对于本文,我们将假设我们接触的所有东西都是一个可迭代的对象 。
现在我们知道了什么是可迭代对象,让我们回到map函数 。
map函数允许我们将一个函数应用到一个可迭代对象中的每个项 。我们希望将一个函数应用到一个列表中的每个项,但是要知道这对大多数可迭代对象来说都是可行的 。map的语法接受两个输入,即要应用的函数和可迭代的对象 。
文章插图
【10分钟学习函数式Python】
假设我们有一个像这样的数字列表:
推荐阅读
- nginx使用学习之正向代理、反向代理、负载均衡
- 零基础学习Java之运算符
- 奶汤什锦小火锅的做法
- 花生红枣养血汤的做法
- 九拓函谷红为三门峡函谷红添新丁
- 21 个必须知道的机器学习开源工具
- Redis学习之数据操作
- 程序员怎样锻炼编程思维
- 你知道Mac如何录屏吗?跟着小灰一起学习一下吧
- 10分钟带你学会微信小程序的反编译