自动化测试进阶之Python推导式的使用!

1405 篇文章 61 订阅
1317 篇文章 53 订阅

一.什么是推导式

Python 中的推导式是利用简洁的语法从一个已有的列表(或任何可迭代的对象)推导出一个新列表的一种构建方式。除了列表推导式之外,Python 还支持集合(set)推导式,字典(dict)推导式和生成器推导式。

二.推导式的优点

1.代码更加简洁

使用推导式可以用一行代码代替典型的多行循环语句,使代码看起来更加干净和优雅。

2.可读性更强

对于熟悉推导式的 Python 的人而言,推导式的结构使得目的更加一目了然,有助于快速理解代码要做什么。

3.执行效率更高

推导式通常比相应的for循环更加高效。在 Python 内部,推导式的执行过程进行了优化,执行速度往往比手动循环快。

4.内置的过滤功能

在推导式中,可以很容易地使用 if 语句来过滤想要的元素,这使得在构建新的列表、集合或字典时不需要写额外的条件判断代码。

5.灵活性和通用性

列表、集合、字典以及生成器推导式使得同一结构的数据转换变得非常方便,这四种推导式几乎可以用在任何序列构建的场合。

6.易于结合使用

推导式可以相互嵌套,比如在列表推导式中使用字典推导式,或是在集合推导式中使用列表推导式等等,使得复杂数据结构的生成更为直观。

7.动态数据生成

对于生成器推导式,它们支持惰性计算(只有在用到的时候才会处理),适合处理大数据集,因为它们不需要在内存中存储整个数据集,而是按需生成数据。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

三.推导式的类型

1.列表推导式

列表推导式是最常见的推导式,它提供了构造列表的快捷方式,使代码更加简洁明了。基本语法结构如下:

[expression for item in iterable if condition]

这里的expression是列表推导式的核心,表示新列表中的元素,可以是对item的操作;item是从iterable中取出的元素;if condition是可选的,用于筛选满足条件的元素。

例子:

  • 创建一个列表,包含0到9的平方。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 列表推导式:创建一个列表,包含0到9的平方
 @Software: PyCharm
'''

squares = [x**2 for x in range(10)]
print(squares)
# 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  • 提取一个字符串列表中长度大于2的字符串。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 列表推导式:提取一个字符串列表中长度大于2的字符串
 @Software: PyCharm
'''

words = ['hello', 'my', 'name', 'is', 'TesterRoad']
long_words = [word for word in words if len(word) > 2]
print(long_words)
# 输出: ['hello', 'name', 'TesterRoad']

2.集合推导式

集合推导式适用于创建集合(不重复元素的集合),遵循的基本格式与列表推导式类似,但使用的是花括号。

{expression for item in iterable if condition}

例子:

  • 创建一个集合,包含0到9的平方,自动去重。

# coding=utf-8
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 集合推导式:创建一个集合,包含0到9的平方,自动去重
 @Software: PyCharm
'''

squares = {x**2 for x in range(-9, 10)}
print(squares)
# 输出: {64, 1, 0, 36, 4, 9, 16, 81, 49, 25}
  • 从两个字符串中提取共有的字符。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 集合推导式:从两个字符串中提取共有的字符
 @Software: PyCharm
'''

a = "TesterRoad"
b = "derivation"
common_letters = {char for char in a if char in b}
print(common_letters)
# 输出: {'d', 'e', 't', 'o', 'a', 'r'}

3.字典推导式

字典推导式用于创建字典,其基本格式如下:

{key_expression: value_expression for item in iterable if condition}

其中,key_expression代表字典键的表达式,value_expression代表字典值的表达式。

例子:

  • 将一个字符串列表转换为一个字典,其中列表项为键,其长度为值。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 字典推导式:将一个字符串列表转换为一个字典,其中列表项为键,其长度为值
 @Software: PyCharm
'''

words = ['hello', 'my', 'name', 'is', 'TesterRoad']
word_lengths = {word: len(word) for word in words}
print(word_lengths)
# 输出: {'hello': 5, 'my': 2, 'name': 4, 'is': 2, 'TesterRoad': 10}
  • 翻转字典的键和值。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 字典推导式:翻转字典的键和值
 @Software: PyCharm
'''

original_dict = {'name': "TesterRoad", 'age': 18, 'tel': 1234567890}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict)
# 输出: {'TesterRoad': 'name', 18: 'age', 1234567890: 'tel'}

4.生成器推导式

生成器推导式是一种特殊的推导式,用于创建生成器对象。生成器推导式的语法如下:

(expression for item in iterable)

在生成器推导式中,expression 是对可迭代对象中每个元素应用的表达式,item 是迭代过程中的变量,iterable 是可迭代对象。生成器推导式会根据迭代过程逐个生成元素,而不是一次性创建所有元素,这使得生成器非常适合处理大型数据集或无限序列。

例子:如何使用生成器推导式创建一个生成器来生成奇数的平方。

# coding=utf-8 
'''
 @Author  : TesterRoad
 @Time    : 2024/4/14
 @Desc    : 生成器推导式:如何使用生成器推导式创建一个生成器来生成奇数的平方
 @Software: PyCharm
'''

odd_squares = (x**2 for x in range(10) if x % 2 != 0)

# 迭代生成器以获取元素
for number in odd_squares:
    print(number)  # 输出 1、9、25、49、81

四.注意

使用推导式可以使得代码不仅更加简洁,还能提高编写效率,同时也容易阅读理解。

不过,当推导式变得过于复杂时,它们可能会变得难以理解,所以在这种情况下可能需要考虑进行拆分或者使用传统的循环结构。

在数据量非常庞大时,可能还需要考虑推导式带来的内存影响,这时候生成器表达式会是一个更好的选择。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值