【Python小技巧】通过实例说明推导式,条件表达式和Lambda函数

简介: 【Python小技巧】通过实例说明推导式,条件表达式和Lambda函数

按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。


本文总结在Python编程中会使用到的三个(高阶)小技巧:推导式,条件表达式和Lambda函数,并通过实例说明其使用方法。


这三者都是用来简化代码的工具,但可能会影响代码的可读性,在实际编码中要综合考虑是否采用这三种方法。


1. 推导式

Python中的推导式是一种简洁且强大的语法结构,用于从一个或多个可迭代对象高效地创建新的列表、集合、字典或生成器对象。以下是四种主要类型的推导式:


1.1 列表推导式

列表推导式用于快速生成列表,它可以包含一个或多个循环以及条件表达式。


基本语法:

new_list = [expression for item in iterable if condition]

例如:

squares = [x**2 for x in range(10)]  # 创建一个包含前10个整数平方的列表
even_squares = [x**2 for x in range(10) if x % 2 == 0]  # 创建只包含偶数平方的列表

print输出为:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 4, 16, 36, 64]


1.2 集合推导式

集合推导式用于创建无重复元素的集合,语法类似于列表推导式。


基本语法:

new_set = {expression for item in iterable if condition}

例如:

unique_even_numbers = {x for x in [1, 2, 2, 3, 4, 4, 4, 5, 6] if x % 2 == 0}  # 创建一个仅包含唯一偶数的集合

print输出为:

{2, 4, 6}

注意:与上面列表推导式不同,集合推导式会自动滤去重复元素,以下面代码为例:

a = {x for x in [1,2,2,3,3,4,5,5]}

print输出为:

{1, 2, 3, 4, 5}
1.3 字典推导式

字典推导式用于创建字典,其中键值对是通过某种表达式和迭代过程生成的。


基本语法:

new_dict = {key_expression: value_expression for item in iterable if condition}

例如:

dict_even_square = {i:i**2 for i in range(10) if i%2==0}

print输出为:

{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
2.4 生成器推导式

生成器推导式看起来与列表推导式相似,但它不直接创建列表,而是生成一个生成器对象,可以逐个产生所需的结果,节省内存。


基本语法:

generator = (expression for item in iterable if condition)

例如:

gen_squares = (x**2 for x in range(5))   # 创建一个生成器,按需生成前5个整数的平方
print(type(gen_squares))
for i in gen_squares:
    print(i)

输出为:

<class 'generator'>
0
1
4
9
16


在以上各个推导式中,expression 是针对 item 计算的新值,iterable 是用于迭代的数据源,if condition 是可选的筛选条件。通过这些结构,Python程序员可以方便地对数据进行转换、筛选和聚合,提升代码的简洁性和执行效率。


2. 条件表达式

Python中的条件表达式,也称为三元运算符,它允许在一行内根据某个条件来决定返回哪个值。条件表达式的语法结构如下:


value_if_true if condition else value_if_false


这里的 condition 是一个布尔表达式,如果 condition 的结果为 True,那么整个条件表达式的值就是 value_if_true;反之,如果 conditionFalse,则整个表达式的值就是 value_if_false


举例来说:


age = 18
status = "成年" if age >= 18 else "未成年"


print输出为:


成年


在这个例子中,如果 age 大于等于18,则 status 变量会被赋值为字符串 “成年”,否则会被赋值为 “未成年”。


而条件表达式也可以实现多个条件的判断,例如下例:


age = 61
status = "未成年" if age < 18 else "成年" if age < 60 else "老年"


print输出为:


老年


条件表达式相比于传统的 if-else 结构更为紧凑,尤其适用于简单的情况,但请注意,对于复杂的逻辑判断,使用多行的 if-else 语句可能会提高代码的可读性。


总结来说,条件表达式是推导式中常用来进行逻辑选择的部分,它可以内嵌在推导式的结构里,共同服务于数据处理和代码简化的目的。


3. Lambda函数


Python 中的 Lambda 函数是一种简化的、匿名的函数定义方式,它允许开发者在不显式定义函数名称的情况下快速编写小型的单行函数。Lambda 函数特别适用于仅需一次性使用的简单功能场合,或者作为其他高阶函数(如 map(), filter(), reduce() 等)的参数。


Lambda 函数的基本语法格式如下:


lambda arguments: expression


  • arguments: 参数列表,可以有一个或多个参数,多个参数之间用逗号 , 分隔。


  • expression: 单一的表达式,此表达式的计算结果将作为 Lambda 函数的返回值。注意,Lambda 函数不允许有复杂的逻辑结构,只能是单个表达式。


举例说明:

  1. 创建一个简单的 Lambda 函数,用于计算两个数的和:

add = lambda x, y: x + y
print(add(3, 5))  # 输出:8


  1. 使用 Lambda 函数作为 map() 函数的参数(这个用法类似列表推导式):

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 输出:[1, 4, 9, 16, 25]


通过 Lambda 函数,可以在不需要定义完整函数的情况下实现简单的操作,增强了代码的简洁性和灵活性。然而,对于较为复杂的功能逻辑,通常建议使用常规的 def 关键字定义的函数以提高代码可读性。


相关文章
|
1天前
|
数据库 云计算 Python
不容错过的经典!Python核心编程(第3版)教你用实例学Python!
在学完任何其他入门类的 Python 图书之后,你可能觉得已经掌握了 Python 而且还觉得学得不错,并为此感到自豪。通过完成大量练习之后,你将会对自己新掌握的 Python 编程技能拥有更多信心。 但是,你可能仍然会有这样的疑问,“现在该怎么办?我能用 Python 编写哪种类型的应用程序呢?”或许你是为了一个相当小众的工作项目而学习使用 Python,你可能会考虑“我还能用 Python 写点其他的吗?”
|
2天前
|
C语言 Python
Python基础教程(第3版)中文版 第6章 函数(笔记)
Python基础教程(第3版)中文版 第6章 函数(笔记)
|
5天前
|
Java 开发者 Python
Java开发者的Python快速进修指南:函数基础
【6月更文挑战第5天】本文探讨了Python函数与Java方法的区别。Python函数使用`def`关键字声明,无需修饰符,参数支持默认值和可变参数,可通过关键字指定顺序。Java则无默认参数,且需按顺序传递。Python函数可返回多个值,而Java需封装为对象。文中还介绍了Python的可变参数(*numbers)、关键字参数(**info)及内置函数如`range`、`zip`、`all`和`any`的用法。
|
6天前
|
DataWorks 监控 API
DataWorks产品使用合集之在赋值节点上面为什么不能使用全局变量o或odps
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6天前
|
SQL DataWorks 监控
DataWorks产品使用合集之有没有办法用python获取到那几个任务的实例再调度
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7天前
|
缓存 测试技术 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,它可以让我们在不改变函数结构的情况下,对函数进行修饰和扩展。本文将深入探讨Python中装饰器的作用、原理及实际运用,帮助读者更好地理解和运用这一技术。
|
8天前
|
数据库 云计算 Python
不容错过的经典!Python核心编程(第3版)教你用实例学Python!
在学完任何其他入门类的 Python 图书之后,你可能觉得已经掌握了 Python 而且还觉得学得不错,并为此感到自豪。通过完成大量练习之后,你将会对自己新掌握的 Python 编程技能拥有更多信心。 但是,你可能仍然会有这样的疑问,“现在该怎么办?我能用 Python 编写哪种类型的应用程序呢?”或许你是为了一个相当小众的工作项目而学习使用 Python,你可能会考虑“我还能用 Python 写点其他的吗?”
|
8天前
|
存储 Python Windows
【Python学习篇】Python实验小练习——函数(十)
【Python学习篇】Python实验小练习——函数(十)
7 1
|
1天前
|
开发者 Python
GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。
|
2天前
|
存储 设计模式 算法
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)