之前在写脚本时,经常会用到range()函数和random模块,有必要好好总结一下它们的使用方法
1、range()函数
值得说明的是:python3和python2中的range()函数有些区别(详情可以看看菜鸟教程中的讲解)
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型
>>> temp = range(1, 5) >>> print(temp) range(1, 5) >>> print(type(temp)) <class 'range'>
可以通过list()来将其转换为列表
>>> list(temp)
[1, 2, 3, 4]
语法:
range(stop)
range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
Python2中 range() 函数返回的是列表
>>> temp = range(1, 5) >>> print(temp) [1, 2, 3, 4] >>> print(type(temp)) <type 'list'>
以下在python3中实验
range()函数一般结合for循环使用,例如遍历一个列表时,如果要通过列表的下标来打印每个元素,则可以通过range()函数实现
>>> nums = ["a","b","c","d","e"] >>> for i in range(len(nums)): print(nums[i]) a b c d e
random模块
当需要生成随机数或者从一个列表中随机取一条或多条数据时,会使用到random模块
1、生成的随机数
使用random.randint(a, b)来生成一个范围内的随机数
>>> random.randint(32768, 66538)
39701
2、从一组数据中随机获取一个元素
使用random.choice(sequence)可以从列表,元组或字符串中随机获取一个元素
>>> random.choice([1,2,3,4,5]) 1 >>> random.choice([1,2,3,4,5]) 5
3、从一组数据中随机获取n个元素
使用random.sample(sequence, n)可以从列表,元组或字符串中随机获取n个元素,且不重复
>>> l = [1,2,3,4,5] >>> random.sample(l,3) [4, 1, 5] >>> random.sample(l,3) [4, 2, 3] >>> random.sample(l,4) [4, 1, 5, 3] >>> l [1, 2, 3, 4, 5] # 原序列l没有变化
一个实际场景
结合range函数和random模块的一个实际场景
有一个接口,它的功能是批量删除数据,对应到页面上:选择多条数据后,点击批量删除按钮,然后会把选择的数据都删掉。
我要做的是:
1、查询列表中的数据,获取其数据总量
2、从查询到的数据中随机取出n条数据
3、把这n条数据传给接口,然后批量删掉
现在需要把每次要批量删到的数量确定下来,通过如下方式即可
count = random.choice(range(1, total+1))
total 表示查询到的数据总数,
range(1, total+1) 表示1~total范围的一个可迭代列表,
random.choice(range(1, total+1)),最小为1,最大为total,从这个范围随机获取一个数,它就是准备删掉的数据量,
后面只需从查询结果中取出这么多条数据即可