一、前言
??本文章主要讲解的内容是关于Python的运算符以及自动化测试技术中需要使用的扩展知识,是运算符的专题讲解,下方有系列文章的传送门,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~
系列文章: ??系列文章1:【Python自动化测试1】遇见Python之美 ??系列文章2:【Python自动化测试2】Python安装配置及PyCharm基本使用 ??系列文章3:【Python自动化测试3】初识数据类型与基础语法 ??系列文章4:【Python自动化测试4】字符串知识总结 ??系列文章5:【Python自动化测试5】列表与元组知识总结 ??系列文章6:【Python自动化测试6】字典与集合知识总结
??
二、数据运算合集
2.1 算数运算符
??算术运算在Python中比较常见,我们所使用的加减乘除都属于算数运算,在Python中一共有7种算数运算符:
运算符 | 描述 | 示例 |
---|
+ | 加:对象相加,可返回正数或负数,整数或浮点数,也可用在字符串相加等 | print(10+3) | - | 减:对象相减,可返回正数或负数,整数或浮点数 | print(10-3) | * | 乘:对象相乘,可返回正数或负数,整数或浮点数,或一个被重复若干次的字符串 | print(10*3) | / | 除:对象相除,可返回正数或负数,只返回浮点数 | print(10/3) | // | 整除:对象进行整除,返回商的整数部分,向下取整 | print(10//3) | % | 模运算:对象取余,返回除法的余数 | print(10%3) | ** | 幂运算:返回x的y次幂 | print(10**3) |
??对应上面的表格,让我们在Python中看下对应结果,这里需要注意的是除法无论是否能够整除,其返回结果均为浮点数:
print(10+3)
print(10-3)
print(10*3)
print(10/3)
print(10//3)
print(10%3)
print(10**3)
??除了纯数字的运算,加法与乘法也可用于字符串的拼接或相乘,如下图所示:
a = "爱"
b = "情"
print(a+b)
print((a+b)*2)
2.2 赋值运算符
??赋值运算符在Python中也很常见,我们日常的算数运算也会用到赋值运算符,在Python中有8种赋值运算符:
运算符 | 描述 | 示例 |
---|
= | 基础赋值运算符 | s = h + y | += | 加法赋值运算符 | s += h 等价于s = s + h | -= | 减法赋值运算符 | s -= h 等价于s = s - h | *= | 乘法赋值运算符 | s *= h 等价于s = s * h | /= | 除法赋值运算符 | s /= h 等价于s = s / h | //= | 整除赋值运算符 | s //= h 等价于s = s // h | %= | 模赋值运算符 | s %= h 等价于s = s % h | **= | 幂赋值运算符 | s **= h 等价于s = s ** h |
??对应上面的表格,让我们在Python中看下对应结果:
h = 5
y = 2
s = 10
s += h
print(s)
s -= h
print(s)
s *= h
print(s)
s /= h
print(s)
s //= h
print(s)
s %= h
print(s)
s **= h
print(s)
2.3 比较运算符
??比较运算符又称关系运算符,在Python中使用频率较高,通常而言用于判断,在自动化测试中也是如此,Python中一共有7种比较运算符,其中的<> 在Python3中的版本已废弃:
运算符 | 描述 | 示例 |
---|
== | 等于,不同于赋值,判断对象是否相等,返回布尔值 | a + b == c | != | 不等于,判断对象是否不相等,返回布尔值 | a + b != c | <> | 不等于,判断对象是否不相等,返回布尔值 | (a <> b) | > | 大于,判断a对象是否大于b,返回布尔值 | a > b | < | 小于,判断a对象是否小于b,返回布尔值 | a < b | >= | 大于等于,判断a对象是否大于等于b | a >= b | <= | 小于等于,判断a对象是否小于等于b | a <= b |
??我们在Python中看下比较运算符的应用与实际结果:
a = 5
b = 10
c = 15
print(a == b)
print(a + b != c)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)
2.4 逻辑运算符
??在Python语言中支持逻辑运算,也习惯性称之为与或非,在很多场景下都可以使用逻辑运算符,自动化测试中逻辑运算的使用较为常见,Python中共有3种逻辑运算:
运算符 | 描述 | 示例 |
---|
and | 与,两个条件同时满足,其中有一个为FALSE ,则结果为FALSE | a and b | or | 或,条件至少需要满足一个,满足即返回True ,都不满足则为False | a or b | not | 非,结果取反 | not a |
a = 3 > 2
b = 9 < 5
print(a and b)
print(a or b)
print(not a)
print(not b)
2.5 成员运算符
??Python也支持成员运算,成员运算在Python中只有2种:
运算符 | 描述 | 示例 |
---|
in | 在指定的序列数据中寻找对应值,返回布尔值 | name = "萌笑天",print("笑" in a) | not in | 在指定的序列数据中没有找到对应值,返回布尔值 | name = "萌笑天",print("爱" not in a) |
name = "萌笑天"
print("笑" in name)
print("爱" not in name)
2.6 身份运算符
??Python中也支持身份运算,身份运算主要是用于比较两个对象间的存储单元,身份运算同成员运算也是有2种形式,在Python自动化测试领域,身份运算的使用较少,故此了解即可:
运算符 | 描述 | 示例 |
---|
is | 判断两个标识符是否引用自同个对象 | (a is b) | is not | 判断两个标识符是否引用自不同对象 | (a is not b) |
a = 10
b = 10
if (a is b):
print("a和b有相同的标识")
else:
print("a和b没有相同的标识")
if ( a is not b ):
print("a和b没有相同的标识")
else:
print("a和b有相同的标识")
a = 10
b = 100
if (a is b):
print("a和b有相同的标识")
else:
print("a和b没有相同的标识")
if ( a is not b ):
print("a和b没有相同的标识")
else:
print("a和b有相同的标识")
2.7 位运算符
??Python中支持位运算,位运算其实就是把数字当成二进制来进行计算,Python中的位运算符一共有8种,在自动化测试的场景中,位运算同样使用较少,了解即可:
运算符 | 描述 | 示例 |
---|
& | 按位与:参与运算值如果都为1则该位为1,否则为0 | (a & b) | | | 按位或:对应二进制位至少有1个为1,结果位则为1 | (a | b) | ^ | 按位异:当两对应的二进位相异时,结果为1,否则为0 | (a ^ b) | ~ | 按位取反:对数据的每个二进制位进行取反,0则为1,1则为0 | (~a) | << | 左移:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | (a << 2) | >> | 右移:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | (a >> 2) |
a = 10
b = 100
c = 1000
c = a & b
print(f"c的值为:{c}")
c = a | b
print(f"c的值为:{c}")
c = a ^ b
print(f"c的值为:{c}")
c = ~a
print(f"c的值为:{c}")
c = a << 2
print(f"c的值为:{c}")
c = a >> 2
print(f"c的值为:{c}")
2.8 运算优先级
??在Python中有很多的运算符,自然也会涉及到很多的运算优先级,运算的优先级可以看看下面的表格,但不需要去记住,因为如果我们想提高运算优先级只需要加小括号进行优先计算即可,故此运算优先级只做扩展了解即可:
运算符 | 描述 |
---|
** | 指数运算,最高优先级运算 | ~ + - | 按位翻转, 一元加号和减号 | * / % // | 乘,除,取模和整除 | + - | 加减法 | >> << | 右移,左移运算符 | & | 位 ‘AND’ | ^ | | 位运算符 | <= < > >= | 比较运算符 | <> == != | 等于运算符 | = %= /= //= -= += *= **= | 赋值运算符 | is is not | 身份运算符 | in not in | 成员运算符 | not and or | 逻辑运算符 |
??
2.9 扩展知识(重点知识)
2.9.1 特殊的浮点运算
??在Python中如果你尝试过0.1 + 0.2 的运算,你会惊奇的发现,结果并不等于0.3 ,如果你要进行判断, 那么返回的结果是False :
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
??为什么0.1 + 0.2 的结果不是0.3 呢,这是因为在我们输入一个十进制的数字给到Python时,Python的处理会先将十进制的数字转换为二进制,经过计算后,在将二进制的结果转换为十进制的数字显示出来:
??对于浮点数而言,十进制的小数与二进制的小数之间是不能够完全对等转换的,通常而言一个我们的十进制小数在进行计算转换时会转换成无限位数的二进制小数,但是在计算机中的处理通常只会截取到无限数据的前50多位,因为有数据的截取,故此造成最终结果的不等价:– 图片来源于网络
??但在我们实际工作中,很明显这个是不允许出现的情况,商城充值、购物积分、银行卡余额等等都会出现类似的小数情况,如果不进行处理或忽略处理就会导致精度丢失,造成一定的损失,出现这种情况,我们可以使用这两种方式来解决这个问题:
??第一种方式:通过round 函数处理,但round 函数会有四舍五入,如下图所示,我需要处理的数据是0.1+0.2 的计算,结果保留1 位小数,如果填写0 则代表取整,通常浮点数保留1 位或者2 位小数:
print(round(0.1+0.2, 1) == 0.3)
??第二种方式:Decimal模块,round 函数在进行一些日常的计算能够满足条件,例如超市收银,但对于高精度计算例如科学计算、银行账户计算、财务统计等,就不能够使用round 函数,我们需要使用Decimal 模块的方式来进行计算:
from decimal import Decimal
print(Decimal(str(0.1)) + Decimal(str(0.2)) == Decimal(str(0.3)))
??值得一提的是Decimal 在进行浮点数处理时需要先将数据转成str 格式,因为浮点数很容易在计算过程中丢失精度,故此需要转换,带来精度提升的同时,会随之损失一定的性能,但这是不可避免的,也是值得的,不过这也只能够运用到一些商业化或者是金钱相关的计算内容,如果用到超高精度且大范围的科学计算,那么使用Decimal 模块也不是更好的选择,在自动化测试领域中,了解到Decimal 已经能足够应对了,有兴趣的同学,可以进一步了解~
??
2.9.2 随机数的生成
??随机数在自动化测试中显得尤为重要,有时候我们需要使用自动生成的随机数作为测试数据,随机数我们使用random 函数,在自动化测试的场景中数字的场景会使用较多:
import random
print(f"1到100的随机整型数据结果为:{random.randint(1, 100)}")
print(f"1到100范围内的奇数结果为:{random.randrange(1, 100, 2)}")
print(f"以10为幅度,从9开始选取的实数结果为:{random.randrange(9, 100, 10)}")
??随机生成小数:
import random
print(f"大于0且小于1的小数随机结果为:{random.random()}")
print(f"大于1且小于100的随机小数为:{random.uniform(1, 100)}")
?? ??
??好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!
???? ??
|