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

03-24 02:40