【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)

python学习之递归函数、闭包、装饰器 规律:从第三项开始,每一项都等于前两项之和,n=(n-2)+(n-1),即n=2n-3,n--当前项,(n-1)--前一项,(n-2)--前前一项。# n等于3时,fun(3) -> fun(2)+fun(1) -> fun(1)+fun(0) -> fun(0)# ot = outer(send) #调用外函数,返回值是inner(内函数的引用)# ot = outer(send) #调用外函数,返回值是inner(内函数的引用) 阅读详情

递归函数


如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就递归函数。

递归函数形成条件

  • 必须有一个明确的结束条件
  • 每进行更深一层的递归时,问题规模相比上次递归都要有所减少
  • 相邻两次重复之间有紧密的联系

代码演示

下图的代码逻辑:

  • 第一次:4 + func(3)
  • 第二次:4 + 3 + func(2)
  • 第三次:4 + 3 + 2 + func(1)
  • 在func(1)中,因为n==1,所以返回值1,代码结束,最终变成:4 + 3 + 2 + 1,结果为10
    在这里插入图片描述

闭包


两个函数的嵌套, 内部函数使用到了外部函数的变量, 这个现象就可以称之为产生闭包。

构成条件

  • 函数中嵌套了一个函数
  • 内层函数使用了外层函数的变量
  • 外层函数的返回值时内层函数的函数名
    在这里插入图片描述
  • 也可写成:outter()()
    在这里插入图片描述
  • 注意:虽然每次调用内函数,会开启一个函数,执行后消亡,但是闭包变量实际只有一份,每次使用内函数都在使用同一份闭包变量。
    在这里插入图片描述

装饰器(语法糖用法、设置多个装饰器)


装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

装饰器:增加额外功能

在这里插入图片描述

语法糖的使用

语法糖用法:

     @装饰器名称(放到需要装饰的函数的头上即可)

在这里插入图片描述

多个装饰器

在这里插入图片描述

【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】 ​ 多层语法糖是指在单个源代码函数名上方添加了多个语法糖,使这段源代码函数体具备多个功能​ 有参装饰器是指在无参装饰器的基础的函数体外层再加上一层函数​ 装饰器修复技术是指,虽然我们再使用装饰器时,可以通过不改变源代码的调用方式和代码能够执行了新的功能,但我们调用的源代码函数名地址的用法并不是源代码的地址,这时我们就可以通过使用装饰件修复技术使调用的源文件地址和用法和源文件相同代码表现。 阅读详情

相关推荐

Windows下Maven环境变量配置避坑指南:解决‘mvn‘不被识别问题

本文详细解析了Windows系统中配置Maven环境变量时常见的'mvn'不被识别问题,特别是当系统提示“无法将‘mvn’项识别为cmdlet、函数、脚本文件或可运行程序的名称”时的解决方案。文章从问题根源入手,提供了清晰的配置步骤、深入的排查方法以及针对PowerShell的特殊处理,旨在帮助开发者彻底解决环境变量配置难题,确保Maven命令正常使用。

weixin_28826961的博客 389

【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)

目录 一、递归函数 1、递归函数形成条件 2、代码演示 二、闭包 1、构成条件 三、装饰器(语法糖用法、设置多个装饰器) 1、装饰器:增加额外功能 2、语法糖的使用 3、多个装饰器 一、递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就递归函数。 1、递归函数形成条件 必须有一个明确的结束条件 每进行更深一层的递归时,问题规模相比上次递归都要有所减少 相邻两次重复之间有紧密的联系 2、代码演示 下图的代码逻辑: 第一次:4 +...

Oh_Python的博客 737

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1055

C语言与javascript(也即js)的区别、JS局部静态变量的实现等

对于有C基础的同学来说,学js是相当简单的,语法类似,这里主要列一下两者的异同,基本上记住了这些异同点,就可以使用js了。 不过C是编译性语言,js是解释性语言,差别还是不小的。 1、js中的变量赋值时,除了基本类型以外,都是赋引用。 2、两者都有回调函数的概念,而且函数名就是回调变量名 ...

野生猿-群号1025127672 2665

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

结合了很多项目和文章,总结一篇项目构建的笔记。 温馨提示:文章末尾记录了我在搭建项目过程中,遇到的一些问题和解决办法 ~

aDiaoYa_的博客 4231

深入探索 ClickHouse:性能优化之道

在大数据处理的广袤天地里,ClickHouse 宛如一颗璀璨的明星,以其卓越的性能为海量数据的存储与查询提供了强大助力。但要想让 ClickHouse 发挥出极致效能,性能优化至关重要。今天,就让我们一同深入探寻 ClickHouse 的性能优化之路。

arnold66的专栏 1547

Python基础之零碎知识——闭包、装饰器、推导式、迭代器、递归函数、异常处理机制

Python基础之零碎知识——闭包、装饰器、推导式、迭代器、生成器、递归函数、异常处理机制 该部分作为python里的一些零碎的知识,但是又极为重要。掌握这些知识点,我相信大家的python水平定能提升一个台阶。 一、闭包 二、装饰器 三、推导式 四、迭代器 五、生成器 六、递归函数 七、异常处理机制 ...

Smileaway_的博客 366

图机器学习(9)——图正则化算法

网络信息能够有效约束模型行为,确保相邻节点的输出保持平滑过渡——这种特性在半监督场景中尤其重要,可实现未标注节点的信息传播。更进一步,这种机制也可用于正则化学习过程,从而提升模型在未见样本上的泛化能力。在本节中,我们探讨了在学习阶段应用正则化技术的方法,用于显著提升模型的鲁棒性,使其具备更优异的泛化能力。

盼小辉丶的博客 8903

python---闭包

python装饰器重要讲解(一)

zzh_love的博客 9924

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)新增用户和用户角色权限

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)查看用户权限、新增用户和用户角色权限。

念兮为美 7479

目标检测YOLO实战应用案例100讲-【目标检测】缺陷检测(二)

在工业生产中总是经常遇到裂痕、划痕等产品的表面缺陷问题,机器视觉行业对于表面检测相比前几年已经有很大的突破,对于产品表面的划伤、污迹等检测已经不再是难点。在金属、玻璃、手机屏幕、液晶板等行业表面检测上应用广泛。但由于该类缺陷形状不规则、深浅对比度低,而且往往会被产品表面的自然纹理或图案所干扰。因此,表面划痕缺陷检测对于正确打光、相机分辨率、被检测部件与工业相机的相对位置、复杂的机器视觉算法等要求非常高。

qq_36130719的博客 728

15——python闭包与装饰器、语法糖

什么是高阶函数:满足一个就属于高阶函数如果在一个内部函数里,对在外作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包闭包 = 内部函数+定义函数时的环境 1.2 装饰器 2.1.1 无参 time,python提供的时间模块要导包,导入import timetime.time 字面意思来讲就是添加一个新的功能,为你的某个函数添加新的功能,也就是说在不修改源代码的基础上给函数增加新的功能 @ ——》语法糖 2.1.2 原函数参数 *args **kwargs

JC03的博客 719

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

[python] 闭包以及装饰器

摘要: 递归函数是一种在函数内部调用自身的函数,必须设置递归出口以避免无限递归。阶乘和斐波那契数列是递归的典型应用,递归的优点是代码简洁,缺点是效率较低。闭包是嵌套函数中内层函数使用外层函数的局部变量,外层函数返回内层函数的函数名。闭包变量被内层函数持续持有和使用,即使外层函数执行完毕也不会被销毁。装饰器是一种函数,可以在不修改原代码的前提下为函数增加额外功能,其返回值也是一个函数对象。

qq_45280097的博客 971

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【人工智能-6】递归函数及装饰器

本文介绍了Python中的递归函数和装饰器两大高级特性。递归函数通过终止条件和自我调用实现问题分解,通过斐波那契数列和阶乘示例演示其应用。装饰器部分首先讲解闭包概念,进而阐述装饰器本质、常见用途及实现方式,包括基本装饰器、带参装饰器和装饰器链。通过多个代码示例展示了装饰器在日志记录、函数增强等方面的实际应用,并详细解析了装饰器的执行机制。文章内容由浅入深,帮助读者掌握这些核心编程技术的原理和使用方法。

m0_64233047的博客 2249

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python中闭包与装饰器

递归函数是指在函数内部调用自身的函数。在Python中,可以使用递归函数来解决一些问题,比如遍历树形结构、计算阶乘、斐波那契数列等。递归函数通常包含两部分:基本情况(base case)和递归情况(recursive case)。基本情况是指递归函数应该在什么情况下停止递归,而递归情况则是指函数调用自身的情况。在这个示例中,factorial函数计算一个数的阶乘。当输入参数n等于0时,函数返回1作为基本情况。否则,函数将调用自身并返回。递归函数在中计算了,最终返回120。

2402_88219100的博客 1140

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python:闭包&装饰器,语法糖

outer#注意不要加小括号,前者是引用,后者是调用函数,返回该函数要返回的值。内层函数使用外层函数的局部变量,外层函数的返回值是内层函数的函数名。print("login")#执行被装饰的函数。print(funa(i))#通过循环输出函数值。print(funa)#里边保存了函数所在位置的引用。#id():#判断两个变量是否是同一个值的引用。print(ot(20))#调用内函数传值。ot=outer(10)#调用外函数传值。条件:函数嵌套(在函数里边再定义函数)add()#普通做法。

2302_80457734的博客 608

Python:递归函数及装饰器函数

递归函数是指函数在其定义中直接或间接调用自身的一种函数。它通过将复杂问题分解为更小的同类子问题来求解。闭包必须满足以下三个条件:必须有一个内嵌函数内嵌函数必须引用外部函数中变量外部函数返回值必须是内嵌函数递归的优雅性:适合处理树形结构(如文件遍历、XML解析)和分治算法(如快速排序)。装饰器的灵活性:通过横向扩展(AOP思想)解决日志、权限等横切关注点。对比:递归是纵向分解问题,装饰器是横向增强功能。递归需警惕性能陷阱,装饰器需注意过度嵌套导致的可读性下降。递归:“自己调用自己,分而治之”

muzi9827的博客 1209

07 Python--递归函数、闭包及装饰器函数

本文介绍了Python中的三种核心编程概念:递归函数、闭包和装饰器。递归函数通过自我调用来解决问题,包括阶乘和斐波那契数列的实现。闭包是内嵌函数与外部变量的组合,能够记住词法作用域。装饰器则在不修改原函数的前提下为其添加新功能,包括无参/带参装饰器、装饰器链和类装饰器的实现方式。三种技术均体现了Python函数式编程的特性,为代码复用和扩展提供了灵活方案。

2202_75674969的博客 778

python中的递归、闭包和装饰器

python中的递归、闭包和装饰器介绍

守墓人的博客:分析日常生活中的工具和一些学习内容 1191

python基础:递归函数与装饰器函数

本文介绍了递归函数和装饰器的基本概念及实现方法。递归函数通过调用自身解决问题,包含终止条件和递归调用两个部分,并以阶乘和斐波那契数列为例展示代码实现。装饰器则在不改变原函数功能的前提下为其添加新功能,包括基本装饰器、带参装饰器和装饰器链三种形式,通过具体代码示例说明了装饰器的定义和使用过程,以及多个装饰器的叠加执行顺序。这两种Python编程技术都能有效提高代码的复用性和可维护性。

2301_82065950的博客 1091

Python学习-递归函数及装饰器函数

阶乘是数学中一个基本概念,表示从1到nn!递归终止条件:当n == 1时,1!= 1递归调用关系n!if n == 1:return 1else:print(factorial(5)) #结果为120通过学习递归函数和装饰器函数,我深刻理解了函数式编程的强大与灵活。递归函数能优雅地解决分解类问题,如阶乘与斐波那契数列,提升了逻辑思维能力;装饰器函数则体现了Python语法的简洁与强大,可在不修改原函数的基础上增强功能,为开发提供了高效、优雅的扩展方式。

qq_74893270的博客 1024

Python学习:递归函数及装饰器函数

递归:函数自我调用,解决分治问题。装饰器:装饰器是函数的函数,通过闭包和高阶函数实现代码复用,是 Python 元编程的核心工具之一。

chunxiaobai99999的博客 1426

详解Python的装饰器(多层语法糖、装饰器和装饰器修复技术及递归函数)

python中的装饰器(decorator)一般采用语法糖的形式,是一种语法格式。比如:@classmethod,@staticmethod,@property,@xxx.setter,@wraps(),@func_name等都是python中的装饰器。装饰器,装饰的对象是函数或者方法。各种装饰器的作用都是一样的:改变被装饰函数或者方法的功能,性质。下面主要讲解@wraps(),@func_name,类装饰器这两种装饰器。

667

Python入门--day06--递归函数及装饰器函数

本文介绍了Python中的递归函数与装饰器函数。递归函数通过将问题分解为子问题来求解,需要设置终止条件以防止无限循环,并以阶乘和斐波那契数列为例进行了说明。装饰器函数基于闭包思想,用于增强函数功能,分为基本装饰器、带参数装饰器和装饰器链三种形式,通过实例展示了日志记录、函数重复执行等功能。文章强调这两个概念需要深入理解,虽然装饰器在日常编码中较少自行编写,但在使用第三方库时能提升代码效率与可读性。

2303_78278237的博客 1359

第十五天 闭包 装饰器 递归函数

文章目录函数(3)1. 闭包2 装饰器(重点,难点)2.1 装饰器写法2.2使用@语法糖将装饰器应用到指定函数上,简化使用2.3 带有不定长参数的装饰器2.4 多个装饰器作用在⼀个函数上(不重要)3.递归函数(不是重点)3.1 嵌套调用3.2 递归调用3.3 递归调⽤过程3.4 递归适用条件作业 函数(3) 1. 闭包 我们可以在⼀个函数中再定义⼀个函数,在函数内部定义的函数称之为内部函数,内...

weixin_46149037的博客 206
上一篇: 【Python零基础入门篇 · 18】:过滤执行代码写法、包的使用
下一篇: 【Python零基础入门篇 · 20】:面向对象基础(类和对象)
街 三 仔
街 三 仔 新星创作者: python技术领域 新星创作者: python技术领域 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄5年 1万+粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值