Python支持的数值类型有整型int、布尔型bool、浮点型float、Decimal。
type(100) #
type(1.0) #
type(True) #
type(False) #
这里要提一下,布尔型是只有两个值的整数。True对应1,False对应0。对于布尔型要从以下方面理解:
>>> 5+2
7
>>> 5-3
2
>>> 5*2
10
>>> 5/2
2.5
>>> 5%2
1
>>> 5**2
25
>>> pow(5,2)
25
>>> divmod(5,2)
(2, 1)
>>> round(1.314, 2) # 保留两位小数,第三位四舍五入
1.31
>>> round(2.5) # 值刚好等于两个整数中间时,得到举例最近的偶数
2
>>> round(1.5) # 值刚好等于两个整数中间时,得到举例最近的偶数
2
>>> round(2.6)
3
>>> abs(-0.5)
0.5
将数值转成二进制后,按位操作。
>>> 30 & 45
12
>>> 30 | 45
63
>>> 30 ^ 45
51
>>> ~30
-31
>>> 3<<2
12
>>> 8>>2
>>> bin(10) # '0b1010'
>>> oct(9) # '0o11'
>>> hex(15) # '0xf'
>>> 5>3 # True
>>> 5<3 # False
>>> 5==3 # False
>>> 5>=3 # True
>>> 5!=3 # True
>>> 5<=3 # False
普通的float型数据在运算时,是有误差的,python默认的是17位小数的精度,再长后面的数据就不准了。如果不能接受误差,可以使用decimal模块解决精确计算问题。
a = 3
b = 1
c = b/a
print(c) # 0.3333333333333333
d = "%.30f" % (1/3)
print(d) # 0.333333333333333314829616256247
e = Decimal(1)/Decimal(3)
print(e) # 0.3333333333333333333333333333 ,默认28位,可调
这个模块很常用。
import random
import string
print(random.randint(1, 10)) # 产生 1 到 10 的一个整数型随机数
print(random.random()) # 产生 0 到 1 之间的随机浮点数
print(random.uniform(1.1, 5.4)) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print(random.choice('tomorrow')) # 从序列中随机选取一个元素
print(random.choice(['剪刀', '石头', '布']))
print(random.randrange(1, 100, 2)) # 生成从1到100的间隔为2的随机整数
print(random.sample('zyxwvutsrqponmlkjihgfedcba', 5)) # 生成5个字符组成的列表
print(''.join(random.sample(string.ascii_letters + string.digits, 8))) # 从a-zA-Z0-9生成指定数量的随机字符
a = [1, 3, 5, 6, 7]
random.shuffle(a) # 将序列a中的元素顺序打乱
print(a)
说到随机数作为测试数据,Python中还有一个非常好用的产生随机数的第三方包Faker(https://pypi.org/project/Faker/)。安装方法是:
pip install Faker
它的功能特别强大,能够产生的随机数类型非常丰富,举几个例子:
from faker import Faker
# Faker.seed(4321) # 随机数种子
fake=Faker('zh_CN')
print(fake.name())
print(fake.address())
print(fake.city())
print(fake.postcode())
print(fake.company())
print(fake.email())
print(fake.hostname())
print(fake.ipv4())
从名字可以看出产生的随机数的类型。
如果想要每次生成的随机数是固定的。可以提供一个随机数种子,这样相同的方法,总会得到相同的随机结果。
在使用Pytest测试框架的测试工作中,可以将faker制作成为fixture函数。例如下面的代码,在conftest.py文件中定义一个叫作faker的fixture函数,其中指定了locale是中国。
from faker import Factory
@pytest.fixture(scope='session')
def faker():
return Factory.create('zh_CN')
测试函数中,就可以直接使用faker,在使用过程中,使用相同seed的faker,产生的随机数是一样的,比如下面的test_faker和test_something这两个测试函数中,相同方法产生的随机数是一样的。
def test_faker(faker):
faker.seed(1234)
print(faker.name(), faker.address(), faker.email())
assert isinstance(faker.name(), str)
def test_something(faker):
faker.seed(1234)
print(faker.name(), faker.address(), faker.email())
assert isinstance(faker.name(), str)
def test_something_else(faker):
print(faker.name(), faker.address(), faker.email())
assert isinstance(faker.name(), str)