Python学习系列之lambda表达式

Python 进阶语法:lambda函数 使用lambda函数可以在对列表进行排序时自定义排序规则。print(sorted_numbers) # 输出:[-1, 2, -3, 4, -5]这段代码的目的是对一个数字列表 numbdrs ,用sorted() 函数进行排序,排序的依据是每个数字的绝对值。数字列表。使用sorted()函数对这个列表进行排序。为了按照每个数字的绝对值进行排序,我们使用了一个key参数,该参数是一个函数,用于提取用于排序的值。在这里,我们使用了一个lambda函数,该函数返回每个数字的绝对值。 阅读详情
AI摘要

本文深入解析Python中的Lambda表达式,探讨其定义、用法及与命名函数的区别,分析使用Lambda的优缺点,提供实用场景建议,帮助读者掌握这一简洁而强大的编程特性。

一、lambda定义与用法

lambda表达式是一行的函数。它们在其他语言中也被称为匿名函数。即,函数没有具体的名称,而用def创建的方法是有名称的。如果你不想在程序中对一个函数使用两次,你也许会想用lambda表达式,它们和普通的函数完全一样。而且当使用函数作为参数的时候,lambda表达式非常有用,可以让代码简单,简洁。

lambda表达式返回的是function类型,说明是一个函数类型。

"""命名的foo函数"""

def foo():return 'beginman'  #Python中单行参数可以和标题写在一行

"""lambda关键字创建匿名函数,该表达式同以上函数"""

lambda:'beginman'   

上面的只是简单的用lambda创建一个函数对象,并没有保存它也没有调用它,时刻会被回收了。这里我们保存并调用:
保存之后,函数对象相当于函数名。

bar = lambda:'beginman'
print bar()     #beginman

原型

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象。

如果没有参数,则lambda冒号前面就没有,如以上例子。

lambda 参数:操作(参数)
lambda [arg1[,arg2,arg3....argN]]:expression

例子

    add = lambda x, y: x + y

    print(add(3, 5))
    # Output: 8

这还有一些lambda表达式的应用案例,可以在一些特殊情况下使用:

列表排序

    a = [(1, 2), (4, 1), (9, 10), (13, -3)]
    a.sort(key=lambda x: x[1])

    print(a)
    # Output: [(13, -3), (4, 1), (1, 2), (9, 10)]

列表并行排序

    data = zip(list1, list2)
    data = sorted(data)
    list1, list2 = map(lambda t: list(t), zip(*data))

二、lambda与命名函数的区别

1、lambda不创建接收变量。

def创建的方法是有名称的,而lambda没有,可以立刻传递(无需变量)。python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
如:

>>> def foo():return 'foo()'
>>> foo
<function foo at 0x011A34F0>

2、python lambda它只是一个表达式,而def则是一个语句。

lambda表达式运行起来像一个函数,当被调用时创建一个框架对象。

因此语句嵌套用def,表达式嵌套用lambda。

比如:

a = 2
if a > 1 :
  def info ():
    print 'haha'
else :
  def test ():
    print 'test'
g = lambda x : x+2
info = [g(x) for x in range(10)]
print info

 因为这一点,lambda能够出现在Python语法不允许def出现的地方。例如,在一个列表常量中或者函数调用的参数中。此外,作为一个表达式,lambda返回了一个值(一个新的函数),可以选择性的赋值给一个变量名。相反,def语句总是得在头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。

3、在内部只能包含一行代码

lambda表达式” : “后面,只能有一个表达式,def则可以有多个。 lambda表达式内部只能包含一行代码,而命名函数内对此无限制。lambda的主体是一个单个的表达式,而不是一个代码块。这个lambda的主体简单得就好像放在def主体的return语句中的代码一样。简单地将结果写成一个顺畅的表达式,而不是明确的返回。因为它仅限于表达式,lambda通常要比def功能要小:你仅能够在lambda主体中封装有限的逻辑进去,连if这样的语句都不能够使用。 这是有意设计的——它限制了程序的嵌套:lambda是一个为编写简单的函数而设计的,而def用来处理更大的任务。

4、自动返回结果

返回lambda表达式中最后一个表达式的值。

5、lambda可以直接作为python 列表或python 字典的成员

6、嵌套问题

像if或for或print等语句不能用于lambda中,def可以。 

因为def是语句,不是表达式不能嵌套在里面,lambda表达式在“:”后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

7、目的不同

lambda一般用来定义简单的函数,而def可以定义复杂的函数。 

8、不可重用

lambda函数不能共享给别的程序调用,def可以。 
 

三、使用lambda的优缺点

lambda 表达式可以写出非常简练的代码,但是缺点也非常明显:难于理解,降低了可读性和性能。特别是对于 Python 新手。

优点:

1、对于单行函数,使用lambda可以省去定义函数的过程,让代码更加精简。
2、在非多次调用的函数的情况下,lambda表达式即用即得,提高性能。
注意:如果for..in..if(python中另外一个简单表达式)能做的,最好不要选择lambda。

3、 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

4、对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

5、使用lambda在某些时候让代码更容易理解。

6、代码简洁,不增加额外变量。

缺点:

1、对很多 Python 程序员来说, lambda 表达式是一种古怪而又陌生的语法。

2、lambda 函数本身缺少名称和文档, 意味着了解它们功能的唯一方式就是读代码,让代码变得更加晦涩。

3、lambda 表达式只能包含一条语句, 因此某些提高可读性的语言功能, 如元组拆包, 不能与它们一起使用。

4、lambda 函数通常可以被替换为标准库中已存在的函数或 Python 内置的函数,利用已有函数是更好的选择。

四、使用lambda的注意项

1、lambda 函数可以接收任意多個参数 (包括可选参数) 并且返回单个表达式的值。 

2、lambda 函数不能包含命令,包含的表达式不能超过一个。

3、即使是print语句也不能用在 lambda形式中,只能使用表达式。并且匿名函数中不能出现if或者for等一些条件判断,循环的语句。

4、lambda表达式返回的函数直接返回这一句表达式的值。没有return,最后一个表达式的值即返回值。

5、匿名函数(lambda表达式),只能写在一行上,所以也有人也叫他单行函数。

6、使用lambda来定义的。

7、参数列表不需要用括号。

8、冒号不是用来开始新语句块的。

9、lambda 定义了一个匿名函数

10、lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

11、如果可以使用for...in...if来完成的,坚决不用lambda。

12、如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。

13、在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

14、lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

15、虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

16、由于可读性方面的考虑,应该避免使用嵌套lambda。

(1)直接调用

>>> (lambda x: x + 3)(3)   第一对函数用来改变优先级,第二队括号表示函数调用
6
因为匿名函数是没有名字的,因此只有函数体和参数组成,直接使用小括号来将函数体括起来,就可以执行了(lambda x: x + 3)
函数体后面加上小括号,就是给匿名函数传参(3)

(2)普通函数所支持的参数的变化,匿名函数都支持的

比如默认参数等:

默认参数
>>> (lambda x,y=3: x+y)(5)
8

 

五、lambda 使用场景

(1)、lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。他们完全是可选的(你总是能够使用def来替代它们),但是你仅需要嵌入小段可执行代码的情况下它们会带来一个更简洁的代码结构。

(2)、你所要做的操作是不重要的: 函数不值得一个名称。

(3)、使用 lambda 表达式比你所能想到的函数名称让代码更容易理解

(4)、你很确定还没有一个现有的函数能满足你的需求。

(5)特别适合在map,pcap等函数内需要函数参数的场景下。

(6)、最重要的是你团队的每个人都了解 lambda 表达式, 并且都同意使用它们。很多语言比如java,C#都具有lambda表达式功能。

python eval 转换k m到乘法计算 原数据 lambda函数处理 我之前写了各种if substr函数,各种报错 正确到热泪盈眶的函数 data['Followers/Fans'] = data['Followers/Fans'].str.replace('k|K','*1000').str.replace('m|M','*1000000').fillna('0') data['Followers/Fans'] = data['Followers/Fans'].apply(eval) 报错函数 # def trans(x): # 阅读详情

相关推荐

深入理解Python中的Lambda(匿名函数)

🚀🚀一、Lambda函数简介在Python中,Lambda函数也称为匿名函数,即没有具体名称的函数。二、Lambda语法详解argumentsexpressionreturn。

xmp65535的博客 2381

Python 之 lambda 函数完整详解 & 巧妙运用

lambda 函数在 Python 编程语言中使用频率非常高,那么,什么是lambda?它有哪些用法? 本文参考: https://blog.youkuaiyun.com/zjuxsl/article/details/79437563 这里总结了关于 Python 中的 lambda 函数的“一个语法,三个特性,四个用法”。 一个语法: 在 Python 中,lambda 函数的语法是唯一的。其形式如...

Nick.Peng's Blogs 34万+

小白快速上手 labelimg:新手图像标注详解教程

本教程主要帮助没有使用过labelimg的小白上手该软件,快速学会基本操作和打标签,为数据集准备打下基础。

小白一枚~ 2万+

lanmbda表达式

lanmbda表达式及应用 参考:添加链接描述 关于lanmbda函数 -1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。 *例如,add=lambda x, y: x+y   add(1,2),输出为3。 -2.将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。 *例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在...

qq_45214489的博客 2430

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

python学习系列(七)函数和Lambda表达式

前面几章全是基础,语法和数据类型;这一章开始函数的学习~ 函数,编程语言灵魂,函数的调用是重点,它是完成逻辑功能的工具,使我们的 code 逻辑清晰。 首先,函数语法格式: def 函数名(参数列表): 函数体 看个实例: def fun(name, age="30"): print("我是:", name) print("今年: " + age)

柒月sunshine 401

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

Python中lambda表达式学习

lambda只是一个表达式,函数体比def简单很多。 lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。 如下例子: 定义了一个lambda表达式,求三个数的和。 再看一个例子: 用lambda表达式求n的阶乘。 -------------------

imzoer的专栏 19万+

基因家族Motif 分析

MEME

hgz2020的博客 6317

C#项目实战——【实例】企业人事管理系统(二):4、数据库与数据表设计;5、创建项目;

(1)展开新建的db_PWMS数据库节点,选中“表”节点,单击鼠标右键,在弹出的快捷菜单中选择“新建表”命令,如下图:(2)在SQL Server 2008管理器的右边显示一个新表,这里输入要创建的表中所需要的字段,并设置主键,如下图:(3)单击“保存”按钮,弹出“选择名称”对话框,如下图,输入要新建的表名“tb_Login”,单击“确定”按钮,即可在数据库中添加一个表。

做有价值的事,积累有价值的笔记! 1621

Python高级语法:Lambda表达式

Lambda是Python中的一个关键字,用于定义匿名函数(即没有名字的函数)。Lambda表达式主要用于需要一个函数作为参数的函数式编程场景,或者只需要一个简单函数而不想使用def关键字定义完整函数的情况。

wly55690的博客 2112

Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师

从金鱼到最强大脑通过 Spring AI 的记忆功能,我们成功让 AI:记住了用户身份实现了多用户隔离做到了持久化存储最终效果用户:“和上次一样” → AI 秒懂用户:“你知道我的名字吗?” → AI:“当然,张三!AI的进化路线🐟金鱼脑 →🧠最强大脑 →🏛️记忆宫殿管理员。

liaokailin的专栏 1516

python lambda表达式表达式详解及应用

在Python中,Lambda表达式是一个重要的特性,可以使代码更加简洁、易读。通过Lambda表达式可以实现一些简单的表达式和函数,例如在数学计算、列表过滤、参数传递、返回值等场景中使用。尽管Lambda表达式具有简洁的语法和灵活的使用方法,但是在编写复杂函数时应该慎重使用,考虑到函数的可读性、可维护性等方面。

naer_chongya的博客 6198

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

python lambda表达式 if_Python学习-lambda表达式

lambda只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。#求三个数的和1 f = lambda x,y,z:x+y+x2 print(f(1,2,3)) #434 f = lambda x,y,z:x+y+z5 print(...

weixin_39694016的博客 1631

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python之lambda表达式

一、lambda表达式 Lambda表达式并不是Python中特有的,很多语言中都有,例如:Jave、C++、C#中都有。 根据百度百科中对“Lambda 表达式”(lambda expression)的解释,它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Pytho...

Matcha 2480

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python lambda表达式学习

Python lambda表达式学习主要以在代码的形式来记录,每行代码都实际运行过,如有疑问或更好的实现方法,欢迎留言,非常感谢,大家共同学习! lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,常用在临时需要一个类似于函数的功能但又不想定义函数的场合。 lambda表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,该表达式的计算结果相当于函...

HBlock的博客 2880

Python lambda表达式及用法

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

Python零基础入门学习 2849

Python中如何使用lambda表达式?

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数,多数用来表示一些相对简单的函数。 而且lambda本来就是用来定义匿名函数的,所以本身也不需要绑定名字。 Lambda表达式的格式为: f = lambda x, y : x+y f(1,1) 输出结果为2 其中,f是一个新的函数作为返回值,lambda后面跟一个或多个参数,紧跟一个冒号,然...

weixin_38747126的博客 2795

Python精进系列:Lambda 表达式

Python的lambda表达式,也被称为匿名函数,正是这样一个能够帮助我们实现简洁代码的强大工具。

进一步有进一步的欢喜~ 862

python lambda 逻辑_Python学习-lambda表达式

lambda只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。#求三个数的和1 f = lambda x,y,z:x+y+x2 print(f(1,2,3)) #434 f = lambda x,y,z:x+y+z5 print(...

weixin_39853843的博客 479

Python Lambda表达式

在Python 中,除了def 之外,还提供了一种生成函数对象的表达式形式,即Lambda表达式,它可以创建小的匿名函数,起到一个函数速写的作用例如:注意:Python 的 Lambda表达式的函数体只能有一条语句Lambda表达式也可以用在 def 函数中,用来返回一个函数例如:官网的例子Lambda还有一个用途是传递一个小函数作为参数例如:官网的例子Lambda定义了一个匿名函数,但使用它并不...

wxjsjp的博客 5958

浅析Java和Python中Lambda表达式

Java中的Lambda表达式 1. 函数式编程 强调做什么,而不是以什么形式做。 函数式编程思想和面向对象编程思想的区别: 面向对象:解决某个问题需找到某个类的某个方法完成 函数式:只要能获取到结果,不重视得到结果的过程 什么是函数式编程思维? 毫无干货的带你理解什么是函数式编程 2. 示例引入 Lambda表达式是是Java8的新特性,通过使用它可以简化代码的编写,但是同样可能会带来...

Forlogenの解忧杂货铺 1035

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

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

weixin_32419787的博客 1072

python lambda if elif_十四、Python lambda表达式及用法

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

weixin_35888497的博客 2370
上一篇: Token相关内容简述
下一篇: Python抓包库
answer3lin
博客等级 码龄11年 138粉丝 61原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值