【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 关键字定义的函数以提高代码可读性。


相关文章
|
17天前
|
API Python
Python 的内建函数
Python 的内置函数列表,方便查询使用方法。
|
17天前
|
数据采集 自然语言处理 搜索推荐
Python内置函数ord()详解
`ord()` 是 Python 中用于将单个字符转换为对应 Unicode 码点的核心函数,支持 ASCII、多语言字符及特殊符号。其返回值为整数(范围 0-1114111),适用于字符编码验证、数据清洗、自定义排序、基础加解密等场景。使用时需注意参数长度必须为 1,否则会触发 `TypeError`。结合 `chr()` 函数可实现双向转换,进阶技巧包括多字节字符处理、编码范围检测及字符分类验证等。
|
2月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
77 20
|
1月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
42 0
|
2月前
|
开发框架 Java .NET
Python中main函数:代码结构的基石
在Python中,`main`函数是程序结构化和模块化的重要组成部分。它实现了脚本执行与模块导入的分离,避免全局作用域污染并提升代码复用性。其核心作用包括:标准化程序入口、保障模块复用及支持测试驱动开发(TDD)。根据项目复杂度,`main`函数有基础版、函数封装版、参数解析版和类封装版四种典型写法。 与其他语言相比,Python的`main`机制更灵活,支持同一文件作为脚本运行或模块导入。进阶技巧涵盖多文件项目管理、命令行参数处理、环境变量配置及日志集成等。此外,还需注意常见错误如全局变量污染和循环导入,并通过延迟加载、多进程支持和类型提示优化性能。
215 0
|
算法 Python 容器
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
176 0
|
9月前
|
算法 Python
Python编程的函数—内置函数
Python编程的函数—内置函数
60 0
|
算法 Python
Python编程实验四:函数的使用
Python编程实验四:函数的使用
190 0
|
存储 程序员 Shell
Python 进阶指南(编程轻松进阶):十、编写高效函数
Python 进阶指南(编程轻松进阶):十、编写高效函数
102 0
|
存储 Shell C++
零基础学会python编程——输入 / 输出函数与变量
零基础学会python编程——输入 / 输出函数与变量
206 0

热门文章

最新文章

推荐镜像

更多