python lambda表达式详解_lambda python

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

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

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

回顾局部函数回顾《Python函数高级用法》一节中,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 表达式,这样程序更加简洁,而且性能更好。

总结本节所介绍的 lambda 表达式是 Python 编程的核心机制之一。Python 语言既支持面向过程编程,也支持面向对象编程。而 lambda 表达式是 Python 面向过程编程的语法基础,因此读者必须引起重视。

Python 的 lambda 表达式只是单行函数的简化版本,因此 lambda 表达式的功能比较简单。

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

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

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


相关推荐

  • ASP.NET OWIN OAuth:遇到的2个refresh token问题

    ASP.NET OWIN OAuth:遇到的2个refresh token问题

    2021年9月8日
    73
  • mxgraph教程_graph绘图

    mxgraph教程_graph绘图mxGraph是一个支持多种语言(Java、JavaScript、PHP、.NET)的画图框架,所绘制的图形可以在主流浏览器以及原生应用上使用。mxGraph官方资料全英文,网上有几篇mxGraph的教程,对于“入门”和“使用”讲解得比较详细。所以这篇文章不是介绍如何画一个图形,写一个helloworld,而是重点介绍学习mxGraph时觉得比较重要的、难以理解的或者容易被忽略的知识点。需…

    2025年6月29日
    3
  • 指令重排详解_cpu指令重排序

    指令重排详解_cpu指令重排序指令重排:编译器指令重排,cpu指令重排,内存指令重排。编译器可能会调整顺序,如下图,左边是c++源码,右边是优化后顺序一条汇编指令的执行是可以分为很多步骤的,分为不同的硬件执行取指IF译码和取寄存器操作数ID执行或者有效地址计算EX(ALU逻辑计算单元)存储器访问MEM写回WB(寄存器)指令重排只可能发生在毫无关系的指令之间,如果指令之间存在依赖关系,则不会重排。单线程内程序的执行结果不能被改变。1原子性是指一个操作是不可中断的.

    2022年10月17日
    2
  • 三菱modbusRTU通讯实例_PLC编程入门梯形图实例讲解[通俗易懂]

    三菱modbusRTU通讯实例_PLC编程入门梯形图实例讲解[通俗易懂]点击箭头处“工业之家”,选择“关注公众号”!PLC编程入门梯形图实例讲解■上升沿下降沿梯形图解析上升沿:上升沿就是此点从不通到通的过程,在PLC里面表现就是只通一次。举例:如上图,当按钮1未按下的时候按钮1是断开的,此点不通,当按钮1被按下,按钮1导通,上面上升沿指令表示当按钮1按下去后,PLC只通一次,后面不管按钮1是否按下,整条线路都不通。下降沿:下降沿就是此点从通到不通的过程,在…

    2025年10月23日
    2
  • python编程是什么-Python编程

    python编程是什么-Python编程随着人工智能时代的来临,编程语言的热度居高不下,随着智能机器人的出现,在2020年更是迎来一波新的高峰。在这样的大环境下,关于谁是人工智能最流行编程语言的讨论也十分热烈,C、C++、Java、Python等编程语言不断被拿出来做比较。那么接下来,风变编程来解析一波当下编程语言的新趋势。Python受欢迎度有望超越Java?近日,TIOBE编程语言社区公布了2020年10月编程语言排行榜。榜单数据显…

    2022年5月17日
    38
  • NOIP2011 提高组合集「建议收藏」

    NOIP2011 提高组合集「建议收藏」NOIP2011提高组合集D1T1铺地毯模拟,题目让你干啥你就干啥#include<iostream>#include<cstdio>usingnamespacestd;intx[100010],y[100010],dx[100010],dy[100010];intmain(){intn;…

    2022年9月24日
    5

发表回复

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

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