【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操作基础】——函数
【Python操作基础】——函数
|
1天前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
9 2
|
4天前
|
数据采集 NoSQL 中间件
python-scrapy框架(四)settings.py文件的用法详解实例
python-scrapy框架(四)settings.py文件的用法详解实例
9 0
|
4天前
|
程序员 Python
python lambda表达式表达式详解及应用
python lambda表达式表达式详解及应用
22 0
|
4天前
|
Java C# 开发者
Python 中的类型注解是一种用于描述变量、函数参数和返回值预期类型的机制
Python的类型注解提升代码可读性和可维护性,虽非强制,但利于静态类型检查(如Mypy)。包括:变量注解、函数参数和返回值注解,使用内置或`typing`模块的复杂类型,自定义类型注解,以及泛型模拟。类型注解可在变量声明、函数定义和注释中使用,帮助避免类型错误,提高开发效率。
16 6
|
5天前
|
BI Python
深入浅出:讲解Python中的列表推导式
深入浅出:讲解Python中的列表推导式
|
6天前
|
存储 Python
【Python 基础】解释reduce函数的工作原理
【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
|
6天前
|
Python
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
|
6月前
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
24 0
|
9月前
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
51 0