我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python函数式编程是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python函数式编程是什么

这篇文章将为大家详细讲解有关Python函数式编程是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

函数范式

在命令式范式中,通过为计算机提供一系列指令然后执行它们来完成任务。在执行这些指令时,可以改变某些状态。例如,假设你最初将A设置为5,然后更改A的值。这时在变量内部值的意义上,你改变了A的状态。

在函数式范式中,你不用告诉计算机做什么而是告诉他这个东西是什么。比如数字的最大公约数是什么,从1到n的乘积是什么等等。

因此,变量不能变化。一旦你设置了一个变量,它就永远保持这种状态(注意,在纯函数式语言中,它们不是变量)。因此,函数式编程没有副作用。副作用指的是函数改变它自己以外的东西。让我们看一些典型Python代码的示例:

Python函数式编程是什么

这段代码的输出是5。在函数式范式中,改变变量是一个很大的禁忌,并且具有影响其范围之外事物的功能也是一个很大的禁忌。函数唯一能做的就是计算一些东西并将其作为结果返回。

现在你可能会想:“没有变量,没有副作用?为什么这样好?“这个问题问得好,我相信大多数人对此感到疑惑。

如果使用相同的参数调用函数两次,则保证返回相同的结果。如果你已经学习了数学函数,你就会知道这个好处。这称为参照透明度。由于函数没有副作用,如果你正在构建一个计算某些事情的程序,你可以加速程序。如果每次调用func(2)都返回3,我们可以将它存储在表中,这可以防止程序重复运行相同的功能。

通常,在函数式编程中,我们不使用循环。我们使用递归。递归是一个数学概念,通常意味着“自我调用”。使用递归函数,该函数将其自身作为子函数重复调用。这是Python中递归函数的一个很好的例子:

Python函数式编程是什么

有些编程语言也具有惰性。这意味着他们直到最后一秒才计算或做任何事情。如果你编写一些代码来执行2 + 2,函数程序只会在你真正需要使用结果时计算出来。我们很快就会在Python中探索惰性。

Map

为了理解,我们先来看看迭代是什么。通常可以迭代的对象是列表或数组,但Python有许多不同的类型可以迭代。你甚至可以创建自己的对象,这些对象可以通过实现魔术方法进行迭代。魔术方法就像是一个API,可以帮助你的对象变得更加Pythonic。您需要实现2个魔术方法才能使对象成为可迭代的:

Python函数式编程是什么

第一个魔术方法“__iter__”(注:这里是双下划线)返回迭代对象,这通常在循环开始时使用。”__next__“返回下一个对象。

让我们快速进入一个终端调用上面的代码:

Python函数式编程是什么

运行将会打印出

Python函数式编程是什么

在Python中,迭代器是一个只有__iter__魔术方法的对象。这意味着您可以访问对象中的位置,但不能遍历该对象。一些对象将具有魔术方法__next__而不是__iter__魔术方法,例如集合(在本文后面讨论)。对于本文,我们假设我们接触的所有内容都是可迭代的对象。

现在我们知道什么是可迭代对象了,让我们回到map函数。 map函数允许我们将函数应用于iterable中的每一项。 Map需要2个输入,它们分别是要应用的函数和可迭代对象。

Python函数式编程是什么

假设我们有一个数字列表,如下所示:

Python函数式编程是什么

我们想要对每个数字进行平方,我们可以编写如下代码:

Python函数式编程是什么

Python中函数式的函数是具有惰性的。如果我们不使用“list”,该函数将存储iterable的定义,而不是列表本身。我们需要明确告诉Python“把它变成一个列表”供我们使用。

在Python中突然从非惰性求值转向惰性求值有点奇怪。如果你在函数式思维方式中考虑得更多,而不是命令式思维方式,那么你最终会习惯它。

现在写一个像“square(num)”这样的普通函数虽然很好,但却是不对的。我们必须定义一个完整的函数才能在map中使用它?好吧,我们可以使用lambda(匿名)函数在map中定义一个函数。

Lambda表达式

lambda表达式是一个只有一行的函数。举个例子,这个lambda表达式对给定的数字进行平方:

Python函数式编程是什么

让我们运行它:

Python函数式编程是什么

这看起来不像一个函数吗?

嗯,这有点令人困惑,但可以解释。我们将一些东西分配给变量“square”。那这个呢:

Python函数式编程是什么

告诉Python这是一个lambda函数,输入叫做x。冒号之后的任何内容都是您对输入所做的操作,它会自动返回结果。

简化我们的square程序到只有一行代码,我们可以这样做:

Python函数式编程是什么

所以在lambda表达式中,所有参数都在左边,你要用它们做的东西在右边。它有点乱。但事实是,编写只有其他函数式程序员才能阅读的代码会有一定的乐趣。此外,使用一个函数并将其转换为一行代码是非常酷的。

Reduce

Reduce是一个将迭代变成一个东西的函数。通常,你可以在列表上使用reduce函数执行计算以将其减少到一个数字。 Reduce看起来像这样:

Python函数式编程是什么

我们经常会使用lambda表达式作为函数。

列表的乘积是每个单独的数字相乘。要做到这一点你将编写如下代码:

Python函数式编程是什么

但是使用reduce你可以这样写:

Python函数式编程是什么

获得相同的功能,代码更短,并且在使用函数式编程的情况下更整洁。(注:reduce函数在Python3中已不是内置函数,需要从functools模块中导入)

Filter

filter函数采用可迭代的方式,并过滤掉你在该可迭代中不需要的所有内容。

通常,filter需要一个函数和一个列表。它将函数应用于列表中的每一项,如果该函数返回True,则不执行任何操作。如果返回False,则从列表中删除该项。

语法如下:

Python函数式编程是什么

让我们看一个小例子,没有filter我们会写:

Python函数式编程是什么

使用filter,可以这样写:

Python函数式编程是什么

Python作为一门不断发展与普及的语言,还在不断更新中。在学习时,建议找一些学习伙伴一起来学习和讨论,效果更佳。如果想学习Python,欢迎加入Python学习交流群(627012464),一起督促,一起学习。里面有开发工具,很多干货和技术资料分享!

高阶函数

高阶函数可以将函数作为参数并返回函数。一个非常简单的例子如下:

Python函数式编程是什么

第二个返回函数的例子:

Python函数式编程是什么

开头我说过纯函数式编程语言没有变量。更高阶的函数使这变得更容易。

Python中的所有函数都是一等公民。一等公民被定义为具有以下一个或多个特征:

在运行时创建

在数据结构中分配变量或元素

作为函数的参数传递

作为函数的结果返回

Python中的所有函数都可以用作高阶函数。

Partial application

Partial application(也称为闭包)有点奇怪,但非常酷。您可以在不提供所需的所有参数的情况下调用函数。让我们在一个例子中看到这一点。我们想要创建一个函数,它接受2个参数,一个基数和一个指数,并返回指数幂的基数,如下所示:

Python函数式编程是什么

现在我们想要一个专用的平方函数,使用幂函数计算出数字的平方:

Python函数式编程是什么

这有效,但如果我们想要一个立方体功能呢?或者求四次方的功能呢?我们可以继续写下它们吗?好吧,你可以。但程序员很懒的。如果你一遍又一遍地重复同样的事情,这表明有一种更快的方法来加快速度,这将使你不再重复。我们可以在这里使用闭包。让我们看一个使用闭包的square函数的示例:

Python函数式编程是什么

是不是很酷!我们可以只使用1个参数来调用需要2个参数的函数。

我们还可以使用一个循环来生成一个幂函数,该函数实现从立方体一直到1000的幂。

Python函数式编程是什么

函数式编程不是pythonic

您可能已经注意到了,我们想要在函数式编程中做的很多事情都围绕着列表。除了reduce函数和闭包之外,您看到的所有函数都会生成列表。 Guido(Python之父)不喜欢Python中的函数式,因为Python已经有了自己生成列表的方法。

如果你在Python的交互环境下写入”import this“,你将会得到:

Python函数式编程是什么

这是Python之禅。这是一首关于Pythonic意味着什么的诗。我们想要涉及的部分是:

There should be one — and preferably only one — obvious way to do it.(应该尽量找到一种,最好是唯一一种明显的解决方案)

在Python中,map和filter可以执行与列表推导(下面讨论)相同的操作。这打破了Python之禅的一个规则,因此函数式编程的这些部分不被视为“pythonic”。

另一个话题是Lambda。在Python中,lambda函数是一个普通函数。 Lambda是语法糖。这两种说法是等价的。

Python函数式编程是什么

普通函数可以执行lambda函数可以执行的所有操作,但它不能以相反的方式工作。 lambda函数不能完成普通函数可以执行的所有操作。

这是一个简短的论证,为什么函数式编程不能很好地适应整个Python生态系统。你可能已经注意到我之前提到了列表推导,我们现在将讨论它们。

列表推导

前面,我提到过你可以用map或filter做的任何事情,你可以用列表推导。列表推导是一种在Python中生成列表的方法。语法是:

Python函数式编程是什么

让我们对列表中的每个数字进行平方,例如:

Python函数式编程是什么

我们可以看到如何将函数应用于列表中的每一项。我们如何应用filter呢?看看前面的代码:

Python函数式编程是什么

我们可以将其转换成一个列表推导,像这样:

Python函数式编程是什么

列表支持if这样的语句。您不再需要将一百万个函数应用于某些东西以获得您想要的东西。事实上,如果你想尝试生成某种列表,那么使用列表推导看起来会更清晰,更容易。如果我们想要将列表中每个0以下的数字平方怎么办?有了lambda,map和filter你会写:

Python函数式编程是什么

这似乎很长很复杂。通过列表推导,它只是:

Python函数式编程是什么

列表推导仅适用于列表。map,filter适合任何可迭代的对象,那么这有什么用呢?你可以对你遇到的任何可迭代对象使用任何推导。

其他推导

你可以为任何可迭代对象创建一个推导。

可以使用推导生成任何可迭代的对象。从Python 2.7开始,您甚至可以生成字典(hashmap)。

如果它是可迭代的,则可以生成它。让我们看一下最后一组的例子。

Python函数式编程是什么

set是一个元素列表,在该列表中没有元素重复两次。

set中的元素没有顺序。

Python函数式编程是什么

您可能会注意到set(集合)与dict(字典)具有相同的花括号。 Python非常聪明。根据你是否为dict提供值,它会知道你是在写dict推导还是set推导。

关于“Python函数式编程是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python函数式编程是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python函数式编程是什么

这篇文章将为大家详细讲解有关Python函数式编程是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。函数范式在命令式范式中,通过为计算机提供一系列指令然后执行它们来完成任务。在执行这些指令时,可以改变某
2023-06-29

Python中的函数式编程的方法是什么

这篇文章主要介绍“Python中的函数式编程的方法是什么”,在日常操作中,相信很多人在Python中的函数式编程的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的函数式编程的方法是什么
2023-06-16

Java8函数式编程方法是什么

这篇“Java8函数式编程方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8函数式编程方法是什么”文章吧。什
2023-06-26

Python 函数式编程

lambda表达式以lambda开头紧跟一定的参数(如果有的话)参数后用冒号和表达式主题隔开只是一个表达式,所以,没有return# 计算一个数字的100倍数stm = lambda x: 100 * x stm(89)map把集合或者列表
2023-01-30

golang函数式编程的未来趋势是什么?

函数式编程在 go 语言中正变得流行,它提供更简洁、更可预测的代码。函数式编程的核心概念是使用纯函数,这些函数给定相同的输入总是返回相同的结果,并且没有副作用。go 提供了一流函数、匿名函数和闭包等特性来支持函数式编程。通过示例,本文展示了
golang函数式编程的未来趋势是什么?
2024-04-30

golang函数式编程的最佳实践是什么?

函数式编程在 go 语言中的最佳实践包括:避免可变状态,提高可预测性和并行潜力。使用不可变数据结构,防止意外修改并增强并发安全性。利用高阶函数,创建可重用和可组合的代码。使用惰性求值,优化处理大量数据的操作性能。实践其他推荐模式,提高代码质
golang函数式编程的最佳实践是什么?
2024-05-01

es6箭头函数是不是函数式编程

这篇文章主要讲解了“es6箭头函数是不是函数式编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6箭头函数是不是函数式编程”吧!是。箭头函数是函数式编程的一种体现,函数式编程将更多的关注
2023-07-05

es6箭头函数是函数式编程吗

是。箭头函数是函数式编程的一种体现,函数式编程将更多的关注点放在输入和输出的关系,省去了过程的一些因素,因此箭头函数中没有自己的this、arguments、new target(ES6)和 super(ES6);箭头函数相当于匿名函数,因此不能使用new来作为构造函数使用。
2023-05-14

Python函数式编程之闭包

-------------------------函数式编程之*******闭包------------------------Note:一:简介 函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。 Python中一切
2023-01-30

Python-函数式编程介绍 (上)

1、代码的组织结构不清晰,可读性差 2、实现重复的功能时,只能重复编写实现功能的代码,代码繁多,耗费时间精力 3、假如需要部分功能的扩展或者更新时,需要找出所有实现此功能的地方,一一修改,无法统一管理,加大了维护
2023-01-31

JavaScript数据类型对函数式编程的影响是什么

这篇文章主要介绍了JavaScript数据类型对函数式编程的影响是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript数据类型对函数式编程的影响是什么文章都会有所收获,下面我们一起来看看吧。J
2023-07-05

Python中的函数式编程是如何实现的?

Python中的函数式编程是如何实现的?函数式编程(Functional Programming,简称FP)是一种编程范式,重点关注函数的运算和组合。与传统的命令式编程相比,函数式编程更注重函数的返回值,而不是过程或状态的改变。Python
2023-10-25

python函数式编程实例介绍

这篇文章主要讲解了“python函数式编程实例介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python函数式编程实例介绍”吧!  函数式编程:是指代码中每一块都是不可变的,都由纯函数的
2023-06-02

Python函数式编程之装饰器

原则:对修改是封闭的,对扩展是开放的,方法:一般不修改函数或者类,而是扩展函数或者类一:装饰器 允许我们将一个提供核心功能的对象和其他可以改变这个功能的对象’包裹‘在一起, 使用装饰对象的任何对象与装饰前后该对象的交互遵循完全相
2023-01-30

day16-python之函数式编程匿名

1.复习 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 name = 'alex' #name=‘lhf’ 4 def change_name(): 5 name='lhf'
2023-01-31

函数式编程对golang有什么影响?

函数式编程在 go 中的使用显着提高了代码的可维护性、并发性和可测试性。它强调使用不可变数据和函数,并通过一等函数、闭包和 goroutine 等特性在 go 中实现。函数式编程原则包括不可变性、纯函数和高阶函数,在 go 中应用这些原则可
函数式编程对golang有什么影响?
2024-05-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录