Python -- 高阶函数
创始人
2024-04-26 07:44:51
0

目录

1.递归函数

 2.匿名函数

3.高阶函数

3.1 定义一个变量指向函数

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

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


1.递归函数

什么是递归函数?

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

递归函数的作用

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

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

 def cal(num):result,i = 1,1while i <= num:result *= ii+= 1return resultprint(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 = 1if num == 1:return 1result = num * factorial(num -1)return resultprint(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))  # 

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

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

3.1 定义一个变量指向函数

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

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

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

 

 def test():return 'hello world'result = test()   # 这种写法是调用test函数,并把函数的返回值赋值给result变量print(result())   # 这里会报错 TypeError: 'str' object is not callablefun = 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函数的返回值赋值给 resultprint(type(result)) #  result 的类型是一个函数result() # 我是demo里输入的内容   我是test函数里输入的内容   既然result是一个函数,那么就可以直接使用() 调用这个函数demo()()  # 我是demo里输入的内容   我是test函数里输入的内容

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...