python lambda表达式及用法_Python lambda表达式及用法

python lambda表达式及用法_Python lambda表达式及用法lambda表达式是现代编程语言争相引入的一种语法,如果说函数是命名的、方便复用的代码块,那么lambda表达式则是功能更灵活的代码块,它可以在程序中被传递和调用。回顾局部函数get_math_func()函数将返回三个局部函数之一。该函数代码如下:defget_math_func(type):#定义三个局部函数…#返回局部函数iftype==”square”:retu…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

6b350316a74b187a5fc5e76332619bf0.png

lambda 表达式是现代编程语言争相引入的一种语法,如果说函数是命名的、方便复用的代码块,那么 lambda 表达式则是功能更灵活的代码块,它可以在程序中被传递和调用。

回顾局部函数

get_math_func() 函数将返回三个局部函数之一。该函数代码如下:def get_math_func(type) :

# 定义三个局部函数

# 返回局部函数

if type == “square” :

return square

if type == “cube” :

return cube

else:

return factorial

由于局部函数的作用域默认仅停留在其封闭函数之内,因此这三个局部函数的函数名的作用太有限了,即仅仅是在程序的 if 语句中作为返回值使用。一旦离开了 get_math_func() 函数体,这三个局部函数的函数名就失去了意义。

既然局部函数的函数名没有太大的意义,那么就考虑使用 lambda 表达式来简化局部函数的写法。

使用 lambda 表达式代替局部函数

如果使用 lambda 表达式来简化 get_math_func() 函数,则可以将程序改写成如下形式:def get_math_func(type) :

result=1

# 该函数返回的是Lambda表达式

if type == ‘square’:

return lambda n: n * n  # ①

elif type == ‘cube’:

return lambda n: n * n * n  # ②

else:

return lambda n: (1 + n) * n / 2 # ③

# 调用get_math_func(),程序返回一个嵌套函数

math_func = get_math_func(“cube”)

print(math_func(5)) # 输出125

math_func = get_math_func(“square”)

print(math_func(5)) # 输出25

math_func = get_math_func(“other”)

print(math_func(5)) # 输出15.0

在上面代码中,return 后面的部分使用 lambda 关键字定义的就是 lambda 表达式,Python 要求 lambda 表达式只能是单行表达式。注意:由于 lambda 表达式只能是单行表达式,不允许使用更复杂的函数形式,因此上面 ③ 号代码处改为计算 1+2+3+…+n 的总和。

lambda 表达式的语法格式如下:lambda [parameter_list] : 表达式

从上面的语法格式可以看出 lambda 表达式的几个要点:

lambda 表达式必须使用 lambda 关键字定义。

在 lambda 关键字之后、冒号左边的是参数列表,可以没有参数,也可以有多个参数。如果有多个参数,则需要用逗号隔开,冒号右边是该 lambda 表达式的返回值。

实际上,lambda 表达式的本质就是匿名的、单行函数体的函数。因此,lambda 表达式可以写成函数的形式。例如,对于如下 lambda 表达式:lambda x , y:x + y

可改写为如下函数形式:def add(x, y): return x+ y上面定义函数时使用了简化语法:当函数体只有一行代码时,可以直接把函数体的代码放在与函数头同一行。

总体来说,函数比 lambda 表达式的适应性更强,lambda 表达式只能创建简单的函数对象(它只适合函数体为单行的情形)。但 lambda 表达式依然有如下两个用途:

对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁。

对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高了性能。

下面代码示范了通过 lambda 表达式来调用 Python 内置的 map() 函数:# 传入计算平方的lambda表达式作为参数

x = map(lambda x: x*x , range(8))

print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49]

# 传入计算平方的lambda表达式作为参数

y = map(lambda x: x*x if x % 2 == 0 else 0, range(8))

print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]

正如从上面代码所看到的,内置的 map() 函数的第一个参数需要传入函数,此处传入了函数的简化形式:lambda 表达式,这样程序更加简洁,而且性能更好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180735.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ARP欺骗原理_ARP欺骗实验

    ARP欺骗原理_ARP欺骗实验一.arp欺骗的原理 以太网设备(比如网卡)都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是以太网设备却识别不了IP数据包中的IP地址,所以要在以太网中进行IP通信,就需要一个协议来建立IP地址与MAC地址的对应关系,使IP数据包能够发送到一个确定的主机上。这种功能是由arp(AddressResolutionProtocol)来完成的。 arp被设计成用来实现

    2025年7月30日
    0
  • Docker 上安装、启动 MySQL (图解)「建议收藏」

    Docker 上安装、启动 MySQL (图解)「建议收藏」1.在docker仓库中搜索mysql的镜像:dockersearchmysql下载镜像:dockerpullmysql2.查看本地镜像:dockerimages-aa.参数-a表示所有b.启动mysql容器,并进入shell命令交互界面:dockerrun-itmy…

    2022年10月4日
    1
  • gradle安装教程_安卓gradle安装和使用配置

    gradle安装教程_安卓gradle安装和使用配置1.访问Gradle官网,找到下载页面。http://services.gradle.org/distributions/。gradle-x.x-bin.zip是需要下载的安装发布版。2.解压3.

    2022年8月5日
    16
  • USB OTG简单介绍

    USB OTG简单介绍

    2021年12月14日
    48
  • 一文解释清卷积神经网络中池化层的作用「建议收藏」

    池化层:池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。池化层分为3类,平均池化,最大池化和随机池化。拿最大池化举个例子:上图的例子是按步幅2进行2X2的最大池化时的处理顺序。最大池化是获得最大值的运算,“2X2”表示目标区域的大小。如上图所示,从2X2的窗口的移动间隔为2个元素。另外,一般来说,池化的窗口大小会和步幅设定成相同的值。比如3X3的窗口的步幅会设为3,4X4的窗口的步幅会设为4等。而最大池化的优点是:

    2022年4月16日
    176
  • mysql 自己一些平时用不到的函数

    mysql 自己一些平时用不到的函数

    2021年8月12日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号