什么是函数式编程?
函数式编程是一种编码范例,其中我们定义要做什么而不是执行什么动作。这个想法最初是从数学中采用的,我们定义输入到函数中的输入以及我们期望从中获得的输出。 函数式编程很少依赖状态管理-这意味着无论输出多少,我们传递相同的参数时,可以将其解释为数据正在进行一些转换,最终导出所需要的输出。
你在Python中的第一个功能
尽管Python并不是主要的功能语言,但它支持功能编程相对简单,因为Python中的所有内容都是对象。这意味着可以将函数分配给变量并传递。 为了使事情简单,让我们从打印Hello World的简单函数开始:
函数的语法以def关键字开头,后跟函数名称,然后使用圆括号。定义函数以冒号(:)结尾。然后在带有四个空格缩进的下一行中,该函数的主体开始。缩进是我们在使用函数时需要记住的最重要的事情。
函数和变量
全局变量和函数变量 。当我们在函数内部以及全局中拥有一个具有相同名称的变量时,当我们尝试访问该变量时(无论是访问全局变量还是函数作用域变量),将存在歧义。 因此,Python提供了一个函数,globals(),通过它我们可以访问函数内部具有相同名称的全局变量:
将函数分配给变量 -在Python中,我们可以将函数分配给变量,然后调用它:
带参数的函数
现在我们知道了如何定义一个函数,是时候进入下一个阶段了,在该阶段我们将输入传递给函数-参数。为了快速理解它,我们将从一个数学函数开始,在该函数中我们计算两个数字的和:
和第一个函数一样,它是一个简单的函数,但是有两个输入- a和b。
调用功能 -仅通过调用函数并以函数中提到的顺序传递参数或使用命名参数,就可以通过两种方式来调用带有参数的函数:
具有默认值的参数 -在上面的示例中,a和b是两个强制性参数—这意味着开发人员必须传递两个参数来调用该函数。在Python中,我们可以使用默认值指定参数。因此,这些参数将是可选参数。如果未传递任何可选参数,则在调用函数时,Python会考虑该参数的默认值:
我们可以通过三种方式调用上述函数,如下所示:
具有返回值的函数
我们已经看到了如何将输入传递给函数。是时候实现函数的输出了。它与Java,Kotlin等其他大多数语言类似-我们需要使用return关键字并提及值:
Python具有返回多个值作为输出的独特功能,这是大多数语言无法做到的:
x,y并且z变量将分别分配有正,负和乘法值。
用作参数和返回值
Python函数式编程可以将函数作为输出返回或将其作为参数传递。
作为参数 -到目前为止,我们已经看到了如何将变量作为参数传递给函数。现在,我们将学习如何将函数作为参数传递给其他函数-类似于Kotlin中的高阶函数:
用作返回值(输出) -与函数作为参数传递类似,我们也可以将其作为输出返回-这是Python中的独特功能:
内部功能
我们可以在另一个函数内编写一个函数,这是我迄今为止在任何其他编程语言中都没有见过的。内部函数的作用域是外部函数-内部函数只能从外部函数访问: to访问内部功能的正确方法
无法从包装函数的外部访问内部函数:
Lambda函数
Lambda是具有单行表达式的函数的最简单形式,并且没有名称。在Python中,我们必须使用lambda关键字而不是def创建lambda函数:
在这里,变量f是一个简单的lambda函数,而a和b是的参数f。语法类似于普通功能。唯一的变化是关键字和单行表达式。 以下是一个简单的示例,演示了我们如何使用普通函数和lambda:
map和过滤器功能
到目前为止,我们已经看到了如何创建创建函数和其他策略。开箱即用的Python包含默认功能,例如map和filter,在一些用例中很方便。
map-map是一个需要另一个函数对象以及任意数量的iterables类似列表和字典的函数。map使用提供给它的函数对象迭代列表中的每个项目,并返回一个列表:
我们可以传递多个列表到map,如下所示:
过滤 -filter函数需要两个参数-一个函数对象和一个可迭代的。Filter遍历返回boolean值的函数对象中的每个项目。最后,filter返回一个包含从功能对象返回true的项目的列表。
装饰器
装饰器是一种设计模式-接受一个对象并为其添加新功能,而无需从调用站点进行任何更改。如前所述,Python中的所有内容都是一个对象-因此我们可以将函数用作修饰符,并可以将其应用于其他函数:
希望你能学到一些有用的东西,谢谢阅读。
领取专属 10元无门槛券
私享最新 技术干货