用Python进行函数式编程

python函数式编程 大家好,这里还还还是长弓 今天我们来讲讲python中的函数式编程 函数式编程 有些同学疑惑了,我们已经学了函数,为什么还要学这个函数式编程呢? 两者的区别是什么呢? 函数是一个语法,函数式编程是一种编程的思路 是将本是CPU加减乘除的过程封装成一个个函数,调用函数的过程,更整体,更人性 函数式编程允许传入一个函数作为函数... 阅读详情

什么是函数式编程?

函数式程序设计是一种编程范例,它把计算当作数学函数的评价,避免状态和可变数据。换句话说,函数编程(FunctionalProgramming,FP)促进没有副作用和不变变量的代码。它是一种声明式的编程风格。它的主要关注点是“解决什么”,而不是以“如何解决”为重点的命令式风格。

函数编程概念

1.纯函数

纯函数有两个性质:

(A)它们不会产生副作用。
(B)如果输入相同,它们总是产生相同的输出。这意味着函数不能依赖于任何可变状态。

入门Python其实很容易,但是我们要去坚持学习,每一天坚持很困难,我相信很多人学了一个星期就放弃了,为什么呢?其实没有好的学习资料给你去学习,你们是很难坚持的,这是小编收集的Python入门学习资料关注,加小编QQ群:799862830,即可免费领取!希望对你们有帮助

Python中的“类型”和“对象”有什么区别?

副作用可由以下原因引起:

  • 更改函数作用域以外的数据。
  • 更改函数中参数的值。
  • 抛出异常或因错误而停止。
  • 打印到控制台或读取用户输入。
  • 从文件中读取或写入文件。

让我们看一个不纯函数的例子 .

num2 = 3
# Adds two numbers, but uses the global `num2` variable.
def add_impure(num1):
    return num1 + num2

print(add_impure(5))

现在让我们来看看添加两个数字的纯函数。

# Adds two numbers, using the arguments passed to the function.
def add_pure(num1, num2):
    return num1 + num2

print(add_pure(5, 3))

2.不变性

在函数式编程中,我们不能在变量初始化后改变它的值。这意味着,如果我们需要更改列表中的值,则需要创建一个具有更新值的新列表,而不是更改现有的列表。在FP中,变量的不可变性质有助于在整个程序执行过程中保持状态。在Python中,诸如int、Float、Complex、String、tuple、冻结集、字节等数据类型是不可变的。

#  id() function returns a unique id for the specified object.
num1 = 21
print(id(num1))

num1 = 12
print(id(num1))

-----------------------------------------------------------------------------------
OUTPUT:

1705703664
1705703520
tuple1 = (0, 1, 2, 3) 
tuple1[0] = 4
print(tuple1)

-----------------------------------------------------------------------------------
OUTPUT:

Traceback (most recent call last):
  File "D:/LeetCode/FP.py", line 2, in <module>
    tuple1[0] = 4
TypeError: 'tuple' object does not support item assignment

Process finished with exit code 1

3.递归

在fp中,我们避免if-etc语句或循环,因为它在每次执行时都会创建不同的输出。函数程序对所有的迭代任务使用递归代替循环。递归是一种函数,它一次又一次地调用自己,直到满足退出条件。

# returns factorial of a number
def factorial(num):

    if num == 1:
        return 1
    else:
        return num * factorial(num - 1)

  
print(factorial(5))

4.函数是一级的,可以是高阶的。

I nFP,功能被视为数据类型,并可与任何其他值一样使用。你可以分配f功能对于变量,将它们存储在数据结构中,将它们作为参数传递,或者在控制结构中使用它们。例如,我们可以用函数填充数组,将它们作为参数传递,或者将它们存储在变量中。

def cube(number):
    return number * number * number

my_cube = cube  # Assigning function as an object
print(my_cube(5))

numbers = [21, my_cube(5), 12]  # Storing function in list
print(numbers)

# Returning function from another function
def display_numbers():
    return my_cube(5)

print(display_numbers())

如果函数包含其他函数作为参数,或者将函数作为输出返回,则称为高阶函数。

映射、筛选和减少是Python中内置的一些高级函数。

高阶函数-映射

Map函数有两个参数。第一个参数是一个函数,第二个参数是可迭代的。然后,它将传递的函数应用于迭代中的每个项。

num = [1, 2, 3, 4, 5]
# returns square of each element in the list.
square = list(map(lambda number: number ** 2, num))
print(square)

-------------------------------------------------------------------------------------------
OUTPUT:

[1, 4, 9, 16, 25]

高阶函数滤波器

滤波函数允许您根据所提供的条件轻松地从更大的数据集中提取匹配的记录。 这需要两个论点。第一个参数是一个函数,第二个参数是可迭代的。Filter函数从函数返回true的可迭代元素中返回序列。

num = [1, 2, 3, 4, 5]
# returns even numbers from list.
even = list(filter(lambda number: number % 2 == 0, num))
print(even)

-------------------------------------------------------------------------------------------
OUTPUT:

[2, 4]

高阶函数-约简

约简函数接受一个函数和一个序列,并返回一个值,其计算方式如下:

  1. 最初,使用序列中的前两项调用函数,并返回结果。
  2. 然后,使用步骤1中获得的结果和序列中的下一个值再次调用该函数。此过程将被重复,直到序列中的每个项被迭代。
from functools import reduce

def add(num1, num2):
    return num1 + num2

print(reduce(add, [1, 2, 3, 4]))

-------------------------------------------------------------------------------------------
OUTPUT:

10

函数式编程的优点

  • 纯函数总是产生相同的输出,并且没有影响最终结果的外部值。因此,程序更容易测试和调试。
  • 我们可以编写高效的并行或并发程序,因为它们独立运行而不改变状态。
  • 它支持懒惰评价,这意味着我们评估价值并只在需要时存储它们。
  • 与OOP不同,FP支持更好的封装和纯功能。
  • 由于FP程序是由纯函数组成的,所以我们可以很容易地重用它们。

函数式程序设计的缺点

  • 当结合递归时,不可变值可能会降低性能。
  • 在某些情况下,编写纯函数可能会降低代码的可读性。
  • 函数式编程有状态。他们总是创建新的对象来执行操作,而不是对现有的对象进行更改。因此,FP应用程序占用了大量内存。
  • 编写纯函数很容易,但是将它们合并到一个完整的应用程序中是很困难的。

结语

这个博客提供了一个一瞥什么函数式编程做,并应提供一些背景如何他们是有益的。Python允许我们以函数式、声明式的方式进行编码。它甚至支持很多常见的函数特性(Likelambda)、map()、filter()和Reach(),这些特性可以帮助您编写简洁、高级和可并行的代码。

【Python】函数式编程 函数式编程(Functional Programming, FP)并非一种全新的编程语言,而是一种编程范式,一种思考和构造程序的方式。它根植于数学中的函数概念,强调程序的执行过程应如同数学函数的求值,避免状态的改变和可变数据。要真正掌握Python中的函数式编程,我们必须首先从其最底层的基石和核心哲学开始理解。在深入理解函数式编程之前,我们有必要先明确“编程范式”(Programming Paradigm)这一概念。编程范式是指一种编写代码和组织程序思想的“风格”或“方法论”。它提供了一套原则和结构,指导开 阅读详情

相关推荐

高速DAC时钟与配置实战:DAC5681Z硬件设计与寄存器编程详解

在高速数据转换系统中,时钟信号是决定系统性能的核心要素,其稳定性和纯净度直接影响数模转换器(DAC)的输出频谱纯度与动态范围。时钟电路的设计原理涉及信号完整性、阻抗匹配与直流偏置,而内部锁相环(PLL)和延迟锁相环(DLL)的配置则是实现精确时序控制的关键技术。这些技术的价值在于,它们共同保障了高速通信、雷达和任意波形生成等应用对信号实时性与精度的严苛要求。本文聚焦于德州仪器(TI)的DAC5681Z,深入解析其外部时钟输入电路的硬件设计要点,包括端接电阻的计算与选型,并详细拆解通过串行外设接口(SPI)对

weixin_30342363的博客 186

函数式编程

什么是函数式编程 从1950年代的Lisp语言开始,就有函数式编程(FP)的概念的。近年来,主流语言在设计时,都会更多的参考函数式特性(Lambda表达式,map…), Java8 开始支持函数式编程。 而在前端领域,ES6中的箭头函数,Recat16.6 开始推出React.memo(), Vue3的composition-api … 这些变量,函数式编程虽古老仍生机勃勃。 面向对象编程的思维方式:把现实世界中的事物抽象成程序世界中的类和对象,通过封装,继承和多态来演示事物事件的联系 函数式编程的思维方

zhukaijin的专栏 249

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1775

【高级语言程序设计】python函数式编程(一)

Python函数式编程的主要内容包括以下几个方面:(1)函数作为一等公民:在函数式编程中,函数被视为一等公民,可以像其他数据类型一样被传递、赋值以及作为返回值。(2)不可变数据:函数式编程鼓励使用不可变数据,即创建后不能被修改的数据。这使得程序更容易理解和推理,并能减少错误的发生。(3)纯函数:纯函数是指没有副作用并且对于给定的输入总是产生相同的输出的函数。纯函数不依赖于和修改外部状态,因此更容易进行测试和并发处理。

Algernon98的博客 538

CPU设计实战:Loongarch版 lab6--20条指令单周期CPU

这个debug卡我时间最长的就是通用寄存器的写使能信号,当时一直没找到,甚至把golden—trace生成了一遍又一遍,对照test,检查了各种,卡了很长时间,我都以为是我之前哪一步搞错了,或者环境什么的,但是一步步做下来并没有,并且“机器永远是对的”让我终于查到了错。debug到一半才想起来写个博客,就不写过程了,下个lab再写过程。下面是两个模块的代码,运行已通过仿真验证。其他的bug就还好,如果认真跟着。就能马上找出来,,上面的每一句话都很重要。走,按逻辑检查并且查。

m0_65369544的博客 6303

3DE重客户端安装

3DE重客户端安装

m0_48170265的博客 9427

函数式程序设计为什么至关重要

Why Functional Programming Matters 函数式程序设计为什么至关重要 作者: John Hughes 原文地址:http://www.md.chalmers.se/~rjmh/Papers/whyfp.html 此论文作于1984年,作为查麦兹大学的备忘录流传了多年,经过小幅度修订的版本出现于1989年与1990年,即[Hug89]与[Hug90]。此版本

量子流逝 2543

重塑计算的五层蛋糕:解读黄仁勋CES2026演讲背后的AI新秩序与物理世界

2026年CES演讲揭示AI新纪元:从语言模型到物理智能 NVIDIA CEO黄仁勋在2026年CES演讲中描绘了计算产业的根本性变革。核心突破包括: 计算范式转移:从指令执行转向意图理解,智能体系统崛起 物理AI突破:发布Cosmos世界模型,通过合成数据训练AI理解物理定律 全新VeraRubin计算平台:6芯片协同设计,解决摩尔定律放缓与AI需求增长的矛盾 自动驾驶革命:推出具备推理能力的Alpamayo模型,实现L4级自动驾驶 演讲标志着AI正从数字世界迈向物理世界,NVIDIA通过全栈布局,正在重

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1274

什么是函数式编程?

引言函数式编程的基本概念纯函数示例一:纯函数不可变性示例二:不可变性高阶函数示例三:高阶函数递归示例四:递归函数式编程的实用技巧函数组合示例五:函数组合惰性求值示例六:惰性求值流式处理示例七:流式处理结语函数式编程是一种强大而优雅的编程范式,它可以极大地提高代码的可读性和可维护性。通过本文提供的示例,我们可以看到函数式编程在实际前端开发中的应用,以及它如何帮助我们编写更高效、更可靠的代码。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1984

Vue3+Openlayers教程导航页【目录】

欢迎来到 Vue3+Openlayers 系列教程,这里是我在 优快云 编写的所有 Vue3+Openlayers 系列相关文章的索引页,适合初学者到进阶用户系统阅读。👀 更多教程正在持续更新中,欢迎关注我,一起探索 Openlayers 的强大魅力!

小彭的博客 1267

【总目录】AUTOSAR精进之路专栏介绍及内容目录持续更新...

本专栏系统讲解AUTOSAR汽车电子开发技术,包含Eth/OS/Can/Lin等协议栈、MCAL驱动、功能安全等核心模块。内容基于实际项目经验,从概念原理到工程配置、特殊需求实现及问题排查进行深入剖析。重点涵盖TC3xx芯片平台开发、多核OS、网络管理、存储协议栈等难点问题,提供100+篇原创技术文章。专栏采用付费模式,保证内容完整性和持续更新,并提供专业答疑服务。适合汽车电子工程师系统学习AUTOSAR开发技术。

qq_36056498的博客 6509

C语言程序与设计——函数(一)

int x;i * i <= x;i++){if(!return 1;不建议使用这种方式,这是一种已经过时的函数定义风格,但是现在的编译器依然可以编译通过,但是只做了解,极其不建议使用。

weixin_46640900的博客 1330

31、摩擦学中的材料选择

本博文深入探讨了摩擦学应用中材料选择的重要性,分析了材料的机械、物理和化学属性对摩擦学性能的影响。同时介绍了材料匹配原则、处理方法及表面涂层技术,以优化耐磨性和抗腐蚀性。通过实际案例和评估方法,为读者提供了系统化的材料选择流程和决策依据。

juice的博客 246

Python函数式编程指南

函数式编程是一种编程范式,强调使用纯函数和不可变数据结构。Python虽然不是一种纯粹的函数式编程语言,但它提供了足够的工具和支持,使得我们可以在Python中实现函数式编程的风格。函数式编程的好处包括代码更加清晰、易于测试以及更容易进行并行化处理。接下来,我们将探讨几个Python函数式编程的关键概念,并通过实际的例子来加深理解。

master_chenchen的博客 1190

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python函数式编程

介绍了函数式编程知识:函数式编程基本、函数式编程的三大基础函数和装饰器等内容

2302_76708905的博客 1957

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python 高级教程之函数式编程

Python 函数是一组相关语句,旨在执行计算、逻辑或评估任务。这个想法是将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以一次又一次地为不同的输入编写相同的代码,而不是一次又一次地调用函数来重用其中包含的代码。

努力是为了站在万人之中,成为别人的光 4233

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python函数式编程例子-浅析Python函数式编程 Python中函数式编程问题

python是函数式编程吗python是函数编程 函数编程定义: 小编猜小编们的爱情已走到尽头无话可说比争吵更折磨"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。 小编记得小编问过你,最后一面你转身回头看小编的时候在想什么呢,你说,你在想以后都不会再见了。你看,小编还没说什么呢,你就提前判了死刑。它属...

weixin_37988176的博客 184

函数式编程语言python-Python函数式编程

在 Python 中使用函数式编程的最佳实践!简 介Python 是一种功能丰富的高级编程语言。它有通用的标准库,支持多种编程语言范式,还有许多内部的透明度。如果你愿意,还可以查看 Python 的底层并修改,甚至能在程序运行的时候直接修改运行时。我最近注意到一个有经验的 Python 程序员使用 Python 的新方法。就像许多 Python 新手一样,我在第一次看到 Python 时喜欢它...

weixin_37988176的博客 278

Python函数式编程进阶

ddd

临渊-测试开发 1302

python 函数式编程

Log模块资料 http://www.cnblogs.com/yyds/p/6901864.html python语言的高级特性 函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中中有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言:LISP,Haskell、 python函数式编程只是借鉴函数式编程的一些特点,可以理解成一...

若尘的博客 1693

python支持函数式编程吗_Python函数式编程

函数式编程函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。函数式编程Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。函数式编程就是一种抽象程度很高的编程范式。在计算机的层次上,CPU执行的是...

weixin_39966602的博客 725

Python函数式编程实战

函数式编程是一种编程范式,与常见的命令式编程(通过语句改变程序状态)不同,函数式编程倡导无副作用、不可变数据以函数作为 “积木” 搭建程序逻辑。

m0_75067840的博客 772

python函数式编程介绍

如果每次调用func(2)都返回3,我们可以将它存储在表中,这可以防止程序重复运行相同的功能。如果你一遍又一遍地重复同样的事情,这表明有一种更快的方法来加快速度,这将使你不再重复。Guido(Python之父)不喜欢Python中的函数式,因为Python已经有了自己生成列表的方法。一旦你设置了一个变量,它就永远保持这种状态(注意,在纯函数式语言中,它们不是变量)。Python中函数式的函数是具有惰性的。在函数式范式中,改变变量是一个很大的禁忌,并且具有影响其范围之外事物的功能也是一个很大的禁忌。

hdxx2022的博客 194
上一篇: Python中的“类型”和“对象”有什么区别?
下一篇: 面向开发人员的前5位Python框架
python588
博客等级 码龄7年 338粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值