软件测试| 教你拿捏Python运算符(三)

简介: 软件测试| 教你拿捏Python运算符(三)

前言

前面两篇文章我们分别介绍了Python的算术运算符、比较运算符合和三目运算符,本篇文章我们来介绍Python的逻辑运算符、成员运算符以及身份运算符 。

逻辑运算符

老规矩,先列出逻辑运算符列表

逻辑运算符 含义 基本格式 说明
and 逻辑与运算,等价于数学中的“且 a and b 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假
or 逻辑或运算,等价于数学中的“或” a or b 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
not 逻辑非运算,等价于数学中的“非” not a 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。

Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。

逻辑运算符一般和比较运算符结合使用,例如:

print(14 > 6 and 90 > 90) # 14大于6为真,90大于90为false,所以整体为false

示例代码如下:

print(3 > 2 and 2 >= 2)  # 返回的是bool类型 True and True -->True
print(3 > 2 or 2 > 1)  # 返回的是bool类型 Ture and Tue -->True
print(3 > 2 or 2 < 1)  # 返回的是bool类型 Ture and False -->True
print(not (3 > 2))  # not True相反结果就是False

a = True
b = True
c = False
d = False
print(a and b)  # True
print(a and c)  # False

# 连续比较:a>b>c --> a>b and b>c  两者都为True才为True
print(3 > 2 > 1)  # True
print(3 > 2 > 2)  # 3>2(True) and 2>2(False)
print((3 > 2) > 1)  # 加了小括号优先级。True > 1 -->False
print(True == 1)  # 1不大于1

# 输出非bool型示例

print(100 and 200)
print(45 and 0)
print("" or "muller")
print(18.5 or "muller")
--------------------------------------------
True
True
True
False
True
False
True
False
False
True
200
0
muller
18.5

成员运算符

成员运算符( in与not in)是Python独有的运算符(全部都是小写的字母),用于判断对象是否是某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者False。下面是成员运算符的列表。

运算符 描述
in 判断某个值是否在序列中,在则返回True,反之返回False
not in 判断某个值是否不在序列中,不在则返回True,反之返回False

示例代码如下:

# 成员运算符in in not
name = "moss"

roles = ["刘培强", "图恒宇", "张鹏", "周喆直","moss"]

# 判断moss在roles中则返回True
print(name in roles)

# 判断moss不在roles中则返回True
print(name not in roles)
----------------------------------
输出结果如下:
True
False

身份运算符

身份运算符(is、is not)和成员运算符一样,也是Python的特色语法。身份运算符用来判断的两个对象的存储单元是否相同的一种运算符号,身份运算符只有is和is not两个运算符,返回的结果都是TRUE或者FALSE。下面是身份运算符的列表:

运算符 描述
is 判断两个数据引用对象否一致,一致则返回True
not 判断两个数据引用对象是否不一致,不一致则返回True

示例代码如下:

a=3
b=2
c=a
print(a is b)
print(a is c)
-------------------------
输出结果如下:
False
True

a、b这两个变量的储存的内容不一样,所以储存单元肯定不一致,但是c和a的其实都是3,这两个变量的存储单元其实是一致的,这个应该比较容易理解。

上方例子若将is改为is not,则输出的结果与上面相反。

若a,b都为列表,a=[0,1,2],b=[1-1,2-1,3-1],变量b通过运算后得出的列表也是[0,1,2],这很好理解,但是这里我们有两个问题:

  • a引用的对象是否跟b是一致的呢?
  • 如果c=a,a和c引用的对象又是否一致呢?

我们运行代码来获取结果:

a=[0,1,2]
b=[1-1,2-1,3-1]
c=a
print(a)
print(b)
print(a is b)
print(a is c)
---------------------------
输出结果如下:
[0, 1, 2]
[0, 1, 2]
False
True

结果我们发现,a和b引用的对象是不一致的,所以a is b输出的结果是FALSE,因为变量b是需要计算的,虽然计算之后得到的列表跟a一模一样,但是计算之前的过程每个元素是要存储的,变量a当中的元素都是数字,计算机是直接存储结果的,而变量b当中的每个元素都是表达式,表达式的储存跟单个元素的储存是不一致的,列表、元组都是如此。
(注意:可计算出结果的纯数值表达式仍然是直接储存结果值)

is与==的区别

双等号是比较运算符,用来判断左右两边的数据是否相等,那么is和双等号在应用时是否一样呢?我们还是接着上面的按个例子,如果我们用“==”来判断a、b、c三个变量是否相等,代码演示如下:

a=[0,1,2]
b=[1-1,2-1,3-1]
c=a
print(a is b)
print(a is c)
print(b is c)
print(a is b is c)
print(a==b==c)
--------------------
输出结果如下:
False
True
False
False
True

通过运行结果,我们看到用双等号进行判断是,只要最终的值是一致的用双等号进行比较运算结果就是TRUE,而is则必须引用同一对象返回结果才为TRUE,否则就是FALSE,这就是is和“==”的区别,使用这两个运算符时不能混淆,因为实现的功能是不一样的。

总结

本篇文章我们介绍了逻辑运算符,成员运算符和身份运算符的使用,我们特别要注意一般情况下,这三种运算符输出的都是bool值,我们也要注意==号与is的区别。下一篇文章,我们将介绍赋值运算符,位运算符和运算符优先级。

相关文章
|
6天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
21 4
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
122 5
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
139 3
|
1月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
|
1月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
|
17天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
62 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
20天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
44 3
|
18天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
35 1
|
1月前
|
Python
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
本篇将详细介绍Python中的运算符,包括数学运算、关系运算、逻辑运算、赋值运算和成员运算等内容。同时会说明运算符的优先级和运算顺序,帮助用户理解和掌握Python中的运算符使用规则。
39 3
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
|
27天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
28 1
下一篇
无影云桌面