Python -- 高阶函数

news2024/11/14 15:28:38

目录

1.递归函数

 2.匿名函数

3.高阶函数

3.1 定义一个变量指向函数

3.2 函数作为另一个函数的参数

 3.3 函数作为另一个函数的返回值


1.递归函数

什么是递归函数?

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

递归函数的作用

举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n

解决办法1:使用循环来完成

 def cal(num):
     result,i = 1,1
     while i <= num:
         result *= i
         i+= 1
     return result
 
 print(cal(3))

 看阶乘的规律

 1! = 1 2! = 2 × 1 = 2 × 1! 3! = 3 × 2 × 1 = 3 × 2! 4! = 4 × 3 × 2 × 1 = 4 × 3! ... n! = n × (n-1)!

解决办法2:使用递归来实现

def factorial(num):
     result = 1
     if num == 1:
         return 1
     result = num * factorial(num -1)
     return result
 print(cal(3))

原理

 2.匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

lambda 参数列表: 运算表达式

如下实例:

 sum = lambda arg1, arg2: arg1 + arg2
 
 # 调用sum函数
 print("Value of total : %d" % sum( 10, 20 ))
 print("Value of total : %d" % sum( 20, 20 ))

Lambda函数能接收任何数量的参数但只能返回一个表达式的值

匿名函数可以执行任意表达式(甚至print函数),但是一般认为表达式应该有一个计算结果供返回使用。

python在编写一些执行脚本的时候可以使用lambda,这样可以接受定义函数的过程,比如写一个简单的脚本管理服务器。

3.高阶函数

在Python中,函数其实也是一种数据类型。

 def test():     return 'hello world' print(type(test))  # <class 'function'>

 函数对应的数据类型是 function,可以把它当做是一种复杂的数据类型。

既然同样都是一种数据类型,我们就可以把它当做数字或者字符串来处理。

3.1 定义一个变量指向函数

在Python中,我们还可以定义一个变量,让它来指向一个函数,相当于给函数起了一个别名。

 def test():
     return 'hello wrold'
 
 fun = test   # 定义了一个变量fun,让它指向了 test 这个函数
 print(fun())   # 使用fun()可以直接调用test这个函数
 
 print(id(fun))  # 1819677672040
 print(id(test))  # 1819677672040

注意:在定义一个变量表示一个函数时,函数后面不能加括号!加括号表示的是调用这个函数。

 

 def test():
     return 'hello world'
 
 result = test()   # 这种写法是调用test函数,并把函数的返回值赋值给result变量
 print(result())   # 这里会报错 TypeError: 'str' object is not callable
 
 fun = test   # 这种写法是给test函数起了一个别名,注意,这里的test后面不能加()
 fun()        # 可以使用别名调用这个函数
 
 注意:
 fun是函数名
 fun()执行这个函数

既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,同样,我们还可以把一个函数当做另一个函数的返回值。这种函数的使用方式我们称之为高阶函数。

3.2 函数作为另一个函数的参数

 def test(age,action):
     if age < 18:
         print('您还没满十八岁,请退出')
     action()   # 把参数action直接当做一个函数来调用
 
 def smoke():
     print('我已经年满十八岁了,我想抽烟')
 
 my_action = smoke  # 定义一个变量my_action,让它指向smoke函数
 test(21, my_action)  # 将my_action传给 test 函数作为它的参数
 
 test(21,smoke)  # 还可以不再定义一个新的变量,直接传入函数名

 3.3 函数作为另一个函数的返回值

 def test():
     print('我是test函数里输入的内容')
 
 def demo():
     print('我是demo里输入的内容')
     return test  # test 函数作为demo函数的返回值
 
 result = demo()  # 我是demo里输入的内容 调用 demo 函数,把demo函数的返回值赋值给 result
 print(type(result)) # <class 'function'> result 的类型是一个函数
 
 result() # 我是demo里输入的内容   我是test函数里输入的内容   既然result是一个函数,那么就可以直接使用() 调用这个函数
 
 demo()()  # 我是demo里输入的内容   我是test函数里输入的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SVM时序预测】基于matlab粒子群算法优化支持向量机PSO-SVM期贷时序数据预测【含Matlab源码 2289期】

⛄一、PSO-SVM介绍 1 SVM SVM是Vapnik提出的一种分类技术&#xff0c;这一技术具有坚实的统计理论基础。SVM可以将原始的数据映射到高维且线性可分的空间&#xff0c;扩展了线性不可分的样本数据&#xff0c;它是使用核函数将线性不可分转换为线性可分。 如果问题为线性不可分…

计算机毕业设计springboot+vue+elementUI进销存管理信息系统

项目介绍 本次系统设计是一个纺织企业进销存管理信息系统,主要目的是为了提升绿 岩纺织科技有限公司的进销存管理能力,实现绿岩纺织科技有限公司的采购/加 工管理、仓库管理、销售管理等功能。 1.基本信息模块 ;1;商品管理&#xff1a;主要包含商品信息的展示以及添加商品功能。…

Java+MySQL基于SSM的在线论坛交流系统

信息和交流是一个一直伴随着人类一生的话题,从人类诞生开始就已经拥有了这一概念,无论是远古时候的打猎还是现代化的多样化合作都离不开信息和交流。随着时代的积累,人们要面对的信息量也越来越大,任何一个人体单位的人类都不可能涉及到全部的知识,这就需要大家不断的进行交流才…

springboot之多数据源---1

一、多数据源的典型使用场景 在实际开发中&#xff0c;经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景&#xff1a; 1 业务复杂&#xff08;数据量大&#xff09; 数据分布在不同的数据库中&#xff0c;数据库拆了&#xff0c; 应用没拆。 一个公司…

Git 分布式版本控制工具 05SSH免登陆:如何使用SSH如何免密登录服务器~

6 ssh免登陆 SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议。不同主机之间在进行通信时&#xff0c;一般都是需要输入密码进行验证&#xff0c; ssh免密码之后&#xff0c;只要通过指定主机地址和端口号就可以实现不同的计算机之间访问时&#xff0c;不需…

基于web的网上图书商城的设计与实现/图书购物系统

摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的网上图书商城。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。网上图书商城的功能已基本实现&#xff0c;主要包括个人中心、图书分类管理、用户管理、图书信息管…

Android12指纹框架完全解析(一)

前言&#xff1a;自从Android6.0开始Google官方出了标准的Android指纹框架&#xff0c;结束了各家指纹厂商各自为政的局面&#xff0c;推动了电容指纹在Android的发展&#xff1b;自从2017年新思的屏下指纹方案横空出世&#xff0c;后边汇顶等指纹厂商跟进&#xff0c;Android …

【Linux】shell命令以及运行原理

shell命令1.用户不能直接使用操作系统2.Linux是一个操作系统3.在软件层面操作Linux系统4.shell运行原理1.用户不能直接使用操作系统 首先在讲shell命令之前&#xff0c;我们要知道 “用户是不能直接在操作系统上操作的&#xff0c;只能在操作系统之上&#xff0c;也就是软件层面…

基于两阶段鲁棒优化算法的微网多电源容量配置(Matlab)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

风控模型应聘,80%会被问到的面试题

模型过拟合&#xff0c;对经常建模的小伙伴来说是非常熟悉的&#xff0c;稍不留神&#xff0c;模型就出现过拟合了&#xff0c;这让我们在解决模型过拟合问题上花费了不少功夫。同样这个也是在面试中最高频会被Q到的问题。因此&#xff0c;在平日里建立模型的过程中&#xff0c…

视觉BEV语义分割模型 Simple-BEV: What Really Matters for Multi-Sensor BEV Perception?

A Simple Baseline for BEV Perception Without LiDAR本文介绍一篇简单的BEV语义分割模型&#xff0c;这篇文章出彩的是消融实验部分&#xff0c;分析了哪些因素对BEV语义分割影响比较大&#xff0c;此外还分析了如何更好使用Radar数据提高感知性能。 项目链接为&#xff1a;h…

fastjson 反序列化RCE,远程命令执行漏洞CVE、CNVD(2022年12月最新)

1、前言 Fastjson 是一个 Java 库&#xff0c;可以将 Java 对象转换为 JSON 格式&#xff0c;也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象&#xff0c;即使是一些预先存在的没有源码的对象。 2、漏洞原理 漏洞利用fastjson autotype在处理json对…

GCD和LCM算法

目录 一 整除 定义 性质 二 GCD 1&#xff09;定义 2&#xff09;性质 3&#xff09;GCD编程 ①暴力法 ②欧几里得算法 ③更相减损术 ④Stein算法 三 LCM ①暴力法 ②最大公约数法 四 裴蜀定理 例题&#xff1a;裴蜀定理 五 算法实践 [蓝桥杯 2019 省 B] 等差…

【AIOT】语音学习

声音以波的形式传播&#xff0c;即声波&#xff08;Sound Wave&#xff09;。当我们以波的视角来理解声音时&#xff0c;却又大繁若简起来&#xff1a;仅凭频率&#xff08;Frequency&#xff09;、幅度&#xff08;Magnitude&#xff09;、相位&#xff08;Phase&#xff09;便…

19 CPP拷贝构造函数

函数以值的方式返回对象时&#xff0c;可能会调用拷贝构造函数&#xff08;VS会调用&#xff0c;Linux不会&#xff0c;g编译器做了优化&#xff09; 代码说明 #include <iostream>using namespace std;//函数以值的方式返回对象时&#xff0c;可能会调用拷贝构造函数&a…

C++对C的语法增强

1、语法检查增强 声明int a; 定义int a 10; c语言的弱语法类型 2、严格的类型转换 枚举类型不能赋值整形 3、struct类型加强 c中定义结构体变量需要加上struct关键字&#xff0c;c不需要 c中结构体只能定义成员变量&#xff0c;不能定义函数。c可以定义成员函数 4、bool类…

聊聊优惠卷秒杀的下单功能

前言 案例来自黑马程序员视频&#xff1a;https://www.bilibili.com/video/BV1cr4y1671t/?spm_id_from333.999.0.0 案例分析 下单时需要判断两点&#xff1a; 秒杀是否开始或者结束&#xff0c;如果尚未开始或者已经结束则无法下单&#xff1b;库存是否充足&#xff0c;不足…

【图像隐写】DWT+SVD数字水印【含GUI Matlab源码 606期】

⛄一、DWTSVD数字水印简介 理论知识参考文献&#xff1a;基于DWT和SVD的彩色图像数字水印算法研究 一种基于DWT-SVD的图像数字水印算法\ ⛄二、部分源代码 function varargout main(varargin) % MAIN M-file for main.fig % MAIN, by itself, creates a new MAIN or raises…

想要提升英语阅读能力的小伙伴,走过路过,千万不要错过!

一、英语四六级阅读提升网站&#xff1a; 据统计&#xff1a;四六级阅读题目的来源主要来自纽约时报、经济学人、大西洋月刊、时代、新闻周刊、卫报等报刊&#xff0c;其分布比重如下图&#xff1a; 原文链接&#xff1a;英语四六级阅读外刊来源&#xff0c;知道事半功倍&#…

IIC信号为什么要加上拉电阻

IIC是一个两线串行通信总线&#xff0c;包含一个SCL信号和SDA信号&#xff0c;SCL是时钟信号&#xff0c;从主设备发出&#xff0c;SDA是数据信号&#xff0c;是一个双向的&#xff0c;设备发送数据和接收数据都是通过SDA信号。 在设计IIC信号电路的时候我们会在SCL和SDA上加一…