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 表达式,这样程序更加简洁,而且性能更好。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用tinyxml2库解析xml

    使用tinyxml2库解析xmltinyxml2简介tinyxml2是c++编写的轻量级的xml解析器,而且是开放源代码的,在一些开源的游戏引擎中用的比较多。源码托管在github上。源码地址:https://github.com/leethomason/tinyxml2tinyxml2使用起来非常简单,下载源码后无需编译成lib文件,直接將tinyxml2.h和tinyxml2.cpp两个文件添加到你自己的工程中即可。

  • anaconda添加清华镜像源_anaconda清华镜像源

    anaconda添加清华镜像源_anaconda清华镜像源在安装tensorflow时,不知道怎么了,一直安装不上去,所以重新配置了下镜像安装环境:win10+anaconda3.5删除之前的镜像源,恢复默认状态condaconfig–remove-keychannels添加清华镜像源清华大学开源软件镜像站#添加镜像源condaconfig–addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/maincondaconfig–addchann

    2022年10月30日
  • linux 中了挖矿病毒

    linux 中了挖矿病毒文章目录中毒特征磁盘cpu跑满100%如何处理反复发作中毒特征磁盘cpu跑满100%如何处理电脑中了挖矿病毒ps-aux|grepkinsingroot194470.01.811917235084?Sl4月150:04/var/tmp/kinsingroot272470.00.0112728…

  • Mac 如何强制关机?「建议收藏」

    Mac 如何强制关机?「建议收藏」在通常情况下,MacOSX是非常稳定的,但是它偶尔也会发点小脾气,出现应用程序没有响应的情况。如果你正在运行的应用程序失去响应,强制退出一般都能解决,但是偶尔也会出现整个系统都失去响应,鼠标不能用,这时候你只能强制关机了。楼主使用Mac2年多了,只遇到过一次死机哈。下面介绍两种强制关机的解决办法:1、不用学就明白的,跟windows一样的,长按电源键不放,五秒之后电脑就会强行切断电源。不过它有个坏处,就是可能会损坏系统文件,所以建议不要使用这种方法。2、同时按住control+.

  • [leetcode]Spiral Matrix II

    [leetcode]Spiral Matrix II

  • 互联网协议

    互联网协议

    2021年10月10日

发表回复

您的电子邮箱地址不会被公开。

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