Python基础:lambda函数详解

在这里插入图片描述

1. lambda函数概念

  除了一般使用def声明的函数外,Python中还支持lambda匿名函数,可以在任何场合替代def函数。
  匿名函数,通常指的是运行时临时创建的,没有显示命名的函数,它允许快速定义简单的函数。

2. 语法

lambda arguments :expression

  或

lambda argument1,argument2...,argumentn : expression using arguments

  lambda 是关键字
  arguments是参数,可以是0个或个,用逗号分割
  expression是一个表达式,描述了函数的返回值

  lambda关键字用于创建小巧的匿名函数。lambda a, b: a+b 函数返回两个参数的和。Lambda 函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda 函数可以引用包含作用域中的变量。

优点:

  简洁lambda表达式可以快速定义简单的函数,无需使用def语句。
  匿名:由于lambda表达式没有正式的函数名称,因此它们是匿名的,可以用于需要短生命周期函数的情况。
  轻量级lambda表达式只包含一个表达式,因此它们占用内存空间较小,适合用于小型任务。
  可嵌套Lambda表达式可以嵌套在其他函数或代码块中使用,使代码更加紧凑。

缺点:
  只能包含一个表达式Lambda表达式只能包含一个表达式,这意味着它们不能包含多个语句或复杂逻辑。
  调试困难:由于Lambda表达式通常很短,因此很难在调试时设置断点和查看执行流程。
  不支持变量定义Lambda表达式不能定义变量,只能使用已存在的变量。这意味着它们在处理复杂逻辑时可能会受到限制。
  性能问题Lambda表达式可能在性能方面不如使用def语句定义的函数。由于它们通常是轻量级的,因此可能不会进行优化。

3. 简单示例

3.1 参数为零

# lambda返回一个函数对象
arg_zero = lambda : '参数为零的示例'
print(arg_zero())

3.2 通过普通函数和匿名函数分别表示2个数相加

# 普通函数
def add(x, y):
    return x + y
result = add(3, 5)
print(result)  # 输出 8

# 匿名函数(lambda 表达式)
add_lambda = lambda x, y: x + y
result_lambda = add_lambda(3, 5)
print(result_lambda)  # 输出 8

4. lambda表达式的应用场景

4.1 函数参数传递

  将Lambda 表达式作为函数的参数,特别是在需要传递简单函数时,例如 mapfiltersorted 等函数。

"""
   map 函数用于对可迭代对象的每个元素应用一个函数,可以通过 lambda 表达式传递这个函数。
"""
numbers = [1, 2, 3, 4, 5]

squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出 [1, 4, 9, 16, 25]
"""
    filter 函数用于过滤可迭代对象中的元素,可以通过 lambda 表达式定义过滤条件。
    过滤出偶数
"""
numbers = [1, 2, 3, 4, 5]

even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4]
"""
    sorted 函数用于排序可迭代对象,通过 lambda 表达式定义排序规则。
    使用 lambda 表达式按字符串长度排序
"""
words = ['apple', 'banana', 'cherry', 'date']

sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 输出 ['date', 'apple', 'banana', 'cherry']

在这里插入图片描述

# 使用 lambda 表达式找出字符串列表中最长和最短的字符串
words = ['apple', 'banana', 'cherry', 'date']
longest_word = max(words, key=lambda x: len(x))
shortest_word = min(words, key=lambda x: len(x))

print("Longest word:", longest_word)  # 输出 Longest word: banana
print("Shortest word:", shortest_word)  # 输出 Shortest word: date

在这里插入图片描述

# 按年龄升序排列,年龄相同则按姓名升序排列
people = [{'name': 'Linda', 'age': 18},{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 30},{'name': 'Scott', 'age': 40}]
sorted_people = sorted(people, key=lambda x: (x['age'], x['name']))
for k in sorted_people:
    print(k)

在这里插入图片描述

4.2 GUI编程

  在GUI编程中,lambda表达式可以用于定义简单的事件处理函数

from tkinter import Button, Tk

# 创建简单的 GUI 窗口
root = Tk()
# 定义按钮点击事件处理函数
button_click_handler = lambda: print("Button clicked!")
# 创建按钮并绑定点击事件
button = Button(root, text="Click me!", command=button_click_handler)
button.pack()
# 启动 GUI 循环
root.mainloop()

4.3 路由处理

  在Web 框架中,使用 Lambda 表达式定义简单的路由处理函数。

from flask import Flask

app = Flask(__name__)

# 使用 lambda 表达式定义路由处理函数
app.route('/hello')(lambda: 'Hello, World!')

if __name__ == '__main__':
    app.run()

4.4 文件处理

  在文件处理中,使用 Lambda 表达式进行简单的文件操作。

# 使用 lambda 表达式按行读取文件内容
with open('example.txt', 'r') as file:
    lines = file.readlines()
    process_line = lambda line: line.strip().upper()
    processed_lines = list(map(process_line, lines))
    print(processed_lines)

4.5 动态创建函数

  在需要动态生成函数的情况下,Lambda 表达式可以用于创建临时函数。

# 使用 lambda 表达式动态生成平方函数
create_squared_function = lambda n: lambda x: x**n
square_of_3 = create_squared_function(3)
print(square_of_3(2))  # 输出 8
from functools import partial

# 使用 lambda 表达式创建一个偏函数,固定第一个参数
power_of_two = partial(lambda x, y: x**y, 2)
result = power_of_two(3)
print(result)  # 输出 8

4.6 使用自定义函数

  可以将 lambda表达式作为自定义函数的参数,使得在函数调用时灵活定义函数行为。

# 自定义函数,接受一个函数参数并应用于两个数
def apply_operation(x, y, operation):
    return operation(x, y)

# 使用 lambda 表达式定义加法操作
result_add = apply_operation(3, 5, lambda x, y: x + y)
print(result_add)  # 输出 8

# 使用 lambda 表达式定义乘法操作
result_multiply = apply_operation(3, 5, lambda x, y: x * y)
print(result_multiply)  # 输出 15

# 使用 lambda 表达式定义除法操作
result_multiply = apply_operation(10, 5, lambda x, y: x // y)
print(result_multiply)  # 输出 2

5. 使用lambda的注意事项

  1)冒号使用: 冒号不是用来开始新的语句块的,而是用来分隔参数和表达式。
  2)参数格式: Lambda函数可以接收任意多个参数,包括可选参数,参数列表不需要用括号。
  3)返回值: Lambda函数返回单个表达式的值,不需要使用return关键字,最后一个表达式的值即为返回值。
  4)表达式数量:Lambda函数只能包含一个表达式,不能包含命令。
  5)语句和循环:Lambda函数不能包含命令(statements),如print语句,对于复杂逻辑需要使用forif循环的,最好使用常规函数以提高可读性和可重用性。
  6)单行函数:Lambda函数通常写在一行上,因此有时被称为单行函数。
  7)程序运行效率:Lambda并不会带来程序运行效率的提高,主要用于代码简洁性。
  8)命名空间: Lambda函数有自己的命名空间,不能访问参数列表之外或全局命名空间中的参数。
  9)可读性: 考虑可读性,应该避免嵌套lambda函数。
  总的来说,lambda函数在处理简单任务和需要一次性使用的小型函数时很有用,但在处理复杂逻辑和需要可读性的情况下,最好使用常规的命名函数。

6. 参考

Python官网:https://docs.python.org/zh-cn/3/tutorial/controlflow.html#lambda-expressions
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/181696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QEMU Guest Agent本地提权漏洞处理(CVE-2023-0664)

一、漏洞描述 QEMU Guest Agent(qga)类似于vmware中的 vmtools,相关安全报告显示它的Windows版本安装程序存在本地提权高危漏洞(CVE-2023-0664),攻击者可利用该漏洞进行本地权限提升,获得SYSTE…

使用 css 实现文字单行居右, 换行居左展示

给外层盒子设置居右展示, 子盒子设置居左。 原理是,如果子盒子没有换行,那么子盒子的长度就是内容的长度,它根本没有空间将字体移动居左,父盒子的居左样式就会生效,子盒子就会居左展示。 当子盒子里面的文字换行了&…

git-3

1.如何让工作区的文件恢复为和暂存区一样? 工作区所作的变更还不及暂存区的变更好,想从暂存区拷贝到工作区,变更工作区(恢复成和暂存区一样的状态),想到用git checkout -- 文件名 2.怎样取消暂存区部分文件的更改? 如…

基于python和django旅游管理系统

基于python和django旅游管理系统 摘要 基于Python和Django的旅游管理系统是一个以现代化技术为基础的系统,旨在提升旅游行业的管理效率和服务水平。该系统以Django框架为核心,结合Python编程语言的灵活性和强大的生态系统,实现了多方面的功能…

UML建模图文详解教程04——对象图

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著 对象图 对象图(object diagram)显示了某一时刻的一组…

穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益(2023.11)

接入穿山甲SDK的app 全屏文字滚动APP 数独训练APP 广告接入示例: Android 个人开发者如何接入广告SDK,实现app流量变现 接入穿山甲SDK app示例: android 数独小游戏 经典数独休闲益智 2023.11.11 ~ 2023.11.22 app接入上架有一段时间了,接…

Pyqt5 设置保存上一次结果(配置文件)

效果 每次打开Pyqt5打包后的程序,默认显示的是上一次的结果 例如下图的 文件路径、表名、类型等 大致的思路 Pyqt5自带的方法QSettings实现保存上一次的设置,其思路是读取ini文件,如果不存在就是程序的初始状态,如果存在则可以读取…

使用Typecho搭建个人博客网站,并内网穿透实现公网访问

使用Typecho搭建个人博客网站,并内网穿透实现公网访问 文章目录 使用Typecho搭建个人博客网站,并内网穿透实现公网访问前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 …

Git工作流和Commit规范

Git大家都非常熟悉了,就不做过多介绍,但是如何用好Git、如何进行合理的分支开发、Merge你是否有一个规范流程呢?💤 不论是一个团队一起开发一个项目,还是自己独立开发一个项目,都少不了要和Git打交道&…

C++中在一个cpp文件中引用另外一个cpp文件的方法

C中在一个cpp文件中引用另外一个cpp文件 可以通过导入cpp文件或者.h文件来实现&#xff0c; 类似python中的import 导入 下面距离说明下 创建1个func1.cpp 内容如下&#xff1a; #include<iostream> using namespace std;int sum (int num1, int num2) {return (num1…

Excel文件比较不再繁琐,xlCompare助您快速找出差异

概要 在现代职场中&#xff0c;Excel 已成为工作中不可或缺的利器。 在日常操作中&#xff0c;我们会遇到需要对两个或多个 Excel 文件进行比较的情况&#xff0c;此时&#xff0c;一款高效的 Excel 文件比较工具就显得尤为重要。 本文将为您介绍一款功能强大、优势明显的 Exc…

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

随着信息和通信技术的进步,智能和移动技术越来越普遍,尤其在医疗保健领域,一些新型卫生信息系统被不断开发出来支持医院和其他卫生保健组织的管理和运作。 智能导诊系统是嵌入到医院和医疗保健卫生中心 HIS系统中的一种专门导诊系统,通过智能语音交互的方式帮助用户完成导诊、分…

tp8 使用rabbitMQ(1)简单队列

php8.0 使用 rabbitmq 要使用 3.6版本以上的&#xff0c; 并且还要开启 php.ini中的 socket 扩展 php think make:command SimpleMQProduce //创建一个生产者命令行 php think make:command SimpleMQConsumer //创建一个消费者命令行 代码中的消息持久化的说明 RabbitMQ 消息持…

测试开发(二) 开发chrome插件,提升测试效率

chrome插件截图 功能说明 自定义拦截请求response数据、并根据需要做解析&#xff0c;方便检查数据&#xff0c;提升测试效率。 chrome插件截图 功能说明 自定义修改请求的header、接口返回的response的header&#xff0c;提升模拟请求的效率&#xff0c;进而提升测试效率。…

奥特曼重返CEO之位!AI发展成硅谷巨头与保守科学家权力之争

OpenAI&#xff0c;一家因ChatGPT而闻名的人工智能公司&#xff0c;近日陷入了一场激烈的权力之争。创始人兼CEO山姆奥特曼&#xff08;Sam Altman&#xff09;突然离职&#xff0c;引发了一系列连锁反应。然而&#xff0c;在经过一番波折和谈判后&#xff0c;奥特曼最终重返Op…

【C++初阶】第一站:C++入门基础(中)

前言&#xff1a; 这篇文章是c入门基础的第一站的中篇,涉及的知识点 函数重载:函数重载的原理--名字修饰 引用:概念、特性、使用场景、常引用、传值、传引用效率比较的知识点 目录 5. 函数重载 &#xff08;续&#xff09; C支持函数重载的原理--名字修饰(name Mangling) 为什么…

深兰科技“汉境”入选2023年湖北省人工智能十大优秀应用案例

11月18日&#xff0c;央视“专精特新制造强国”城市大会在湖北武汉召开。会上&#xff0c;正式发布了“湖北省工业互联网标识十大优秀应用案例”&#xff0c;由深兰科技(武汉)股份有限公司基于AIGC多模态融合大模型技术开发打造的江汉路步行街元宇宙场景应用——汉境&#xff0…

广告机/商业显示屏_基于MT8788安卓主板方案

安卓主板在广告机领域扮演着重要的角色。无论是在商场、车站、酒店、电梯、机场还是高铁站&#xff0c;LED广告机广泛应用&#xff0c;并通过不同方式进行播放和管理。 广告机/商业显示屏_基于MT8788安卓主板方案 基于MT8788安卓主板方案的广告机采用了联发科MT8788八核芯片方案…

深入了解Java8新特性-日期时间API

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概2000多字&#xff0c;预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…
最新文章