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)
上一篇 2022年10月18日 上午9:16
下一篇 2022年10月18日 上午9:16


相关推荐

  • Django(54)drf视图家族「建议收藏」

    Django(54)drf视图家族「建议收藏」视图家族drf的视图总共分为以下4个,对应4个源码文件views:视图类generics:工具视图mixins:视图工具集viewsets:视图集学习曲线我们学习视图,可以按照以下的曲线

    2022年8月7日
    6
  • 2019年最佳黑客书籍 – 初级到高级[通俗易懂]

    2019年最佳黑客书籍 – 初级到高级[通俗易懂]2019年最佳黑客书籍-初级到高级2019年4月17日斯特凡本文译自https://www.ceos3c.com/hacking/the-best-hacking-books/出于流行的要求,现在是时候将2019年最佳黑客书籍列表整理在一起。现在,这个列表不仅包含2019年发布的黑客书籍,而且还包含了今年值得一提的所有书籍。仍然会有一些经常被提及的经典,即使它们多年没有更新,它们仍然…

    2025年11月13日
    6
  • updatedata讲解

    updatedata讲解当你使用了 ClassWizard 建立了控件和变量之间的联系后 当你修改了变量的值 而希望对话框控件更新显示 就应该在修改变量后调用 UpdateData FALSE 如果你希望知道用户在对话框中到底输入了什么 就应该在访问变量前调用 UpdateData TRUE 用处 主要控制 ddx data 把控件中的值和变量进行交换比如你有个编辑框 输入了一些值 你的程序怎么得到呢 必须先调

    2026年3月18日
    1
  • json数组转对象集合_解析json字符串转成对象集合

    json数组转对象集合_解析json字符串转成对象集合json数组转对象//使用alibabafastjson@Testpublicvoidtest3(){Stringstr=”[{‘aa’:’123′,’bb’:’456′},{‘aa’:789,’bb’:’112′}]”;List<Test1>tests=JSONArray.parseArray(str,Test1.class);for(Test1test:tests){System.

    2025年10月24日
    3
  • python flake8 代码扫描

    python flake8 代码扫描一、介绍Flake8是由Python官方发布的一款辅助检测Python代码是否规范的工具,flake8是下面三个工具的封装:PyFlakesPep8NedBatchelder’sMcCabescriptFlake8通过启动单独的flake8脚本运行所有工具,它在一个Per文件中显示告警,合并到输出中。也增加一些特征:包含这行文件将被忽略:#fl…

    2025年11月5日
    10
  • LVDS接口详解

    LVDS接口详解一 LVDS 输出接口概述二 LVDS 接口电路的组成三 LVDS 输出接口电路类型四 典型 LVDS 发送芯片介绍五 LVDS 发送芯片的输入与输出信号六 LVDS 数据输出格式 一 LVDS 输出接口概述液晶显示器驱动板输出的数字信号中 除了包括 RGB 数字信号外 还包括行同步 场同步 像素时钟等信号 其中像素时钟信号的最高频率可超过 28MHZ 采用 TTL 接口 数据传输速率不高 传输距离较短 而

    2026年3月26日
    1

发表回复

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

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