常用模块一(random模块、time模块、sys模块)
一、random模块
import random # 1 取随机小数 应用:数学计算 ret = random.random() # 大于0且小于1之间的小数 print(ret) # 0.5355954844533712 ret = random.uniform(1,3) # 大于1且小于2之间的小数 print(ret) # 1.8309601532502473 # 2 取随机整数 应用:抽奖,彩票 ret = random.randint(1,5) # 大于等于1且小于等于5之间的整数 print(ret) # 5 ret = random.randrange(1,100,2) # 大于等于1且小于100之间的奇数 print(ret) # 45 # 3 随机选择一个返回 应用:抽奖 lst = ['aa','b',(1,2),123] ret = random.choice(lst) # 随机返回列表中的一个元素 ret = random.sample(lst,2) # 随机返回列表中两个元素(两个元素不是同一个) # 4 打乱一个列表顺序,在原列表的基础上直接进行修改,节省内存 应用:洗牌 random.shuffle(lst) print(lst) # [(1, 2), 'b', 'aa', 123]
练习题:写一个生成验证码函数
def code(n=6, alpha = True): verCode = '' for i in range(n): num = str(random.randint(0,9)) if alpha: alpha_u = chr(random.randint(65,90)) alpha_l = chr(random.randint(97,122)) verCode += random.choice([num, alpha_u, alpha_l]) else: verCode += num return verCode print(code(4, False)) # 2570 生成4位数字验证码 print(code(6, False)) # 319549 6位数字验证码 print(code()) # 0IwtC7 6位(数字+大小写字母)验证码
二、time时间模块
和时间有关系的我们就要用到时间模块,在使用模块之前,应该首先导入这个模块。
# 常用方法 time.sleep(3) # (线程)推迟指定的时间运行. 单位为秒. ret = time.time() # 获取当前时间戳 print(ret) # 1534751684.6865652
在python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:
1,时间戳(timestamp):通常来说,时间戳表示的是从伦敦时间1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
2,格式化的时间字符串(Format String):比如:‘1999-12-06’、‘2018.8.8’
3,元组(struct_time):struct_time元组共有9个元素,具体见下表:
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
tm_year(年) |
比如2008 |
1 |
tm_mon(月) |
1-12 |
2 |
tm_mday(日) |
1-31 |
3 |
tm_hour(时) |
0-23 |
4 |
tm_min(分) |
0-59 |
5 |
tm_sec(秒) |
0-60 |
6 |
tm_wday(weekday星期几) |
0-6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1-366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
首先,我们先导入time模块,来认识一下python中表示时间的几种格式,如下示例:
import time # 时间戳 time.time() # 时间字符串 ret = time.strftime('%Y-%m-%d %H:%M:%S') print(ret) # 2018-08-20 16:16:00 # 时间元组 localtime将一个时间戳转换为当前时区的struct_time ret = time.localtime() print(ret) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=16, tm_min=17, tm_sec=7, tm_wday=0, tm_yday=232, tm_isdst=0)
时间模块小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;时间元组则是用来操作时间的。
几种时间格式之间的转换:
# 时间戳-->结构化时间 # time.gmtime(时间戳) # UTC时间,与英国伦敦当地时间一致 # time.localtime(时间戳) # 当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 >>>time.gmtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) >>>time.localtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) # 结构化时间-->时间戳 # time.mktime(结构化时间) >>>time_tuple = time.localtime(1500000000) >>>time.mktime(time_tuple) 1500000000.0 # 字符串时间-->结构化时间 # time.strptime(时间字符串,字符串对应格式) >>>time.strptime("2018-08-20","%Y-%m-%d") time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=232, tm_isdst=-1) >>>time.strptime("07/24/2017","%m/%d/%Y") time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1) # 结构化时间-->字符串时间 # time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间 >>>time.strftime("%Y-%m-%d %X") '2018-08-20 16:40:59' >>>time.strftime("%Y-%m-%d",time.localtime(1500000000)) '2017-07-14'
练习题:计算时间差
# 2018-8-19 22:10:8 到 2018-8-20 11:07:3 经过了多少时分秒 struct_time1 = time.strptime('2018-8-19 22:10:8','%Y-%m-%d %H:%M:%S') struct_time2 = time.strptime('2018-8-20 11:07:3', '%Y-%m-%d %H:%M:%S') ret1 = time.mktime(struct_time1) ret2 = time.mktime(struct_time2) ret = ret2 - ret1 st = time.gmtime(ret) print("经过了%s年%s月%s日%s时%s分%s秒" % (st.tm_year-1970, st.tm_mon-1, st.tm_mday-1, st.tm_hour, st.tm_min, st.tm_sec))
练习题:请将当前时间的当前月1号的时间戳时间取出来-函数
def get_time(): st = time.localtime() st2 = time.strptime(f'{st.tm_year}-{st.tm_mon}-1','%Y-%m-%d') return time.mktime(st2) print(get_time())
三、sys模块
sys模块是和python解释器交互的一个接口。
1,sys.argv
sys.argv # 命令行参数List,第一个元素是程序本身路径
1)程序员 运维人员 在命令行输入代码
2)操作系统input事件 阻塞 退出了CPU的竞争
2,sys.path
模块是存在解释器里的吗?不是!模块应该是存在硬盘上
但是我在使用的时候import -- > 这个模块才到内存中
一个模块能否被顺利的导入,全看sys.path下面有没有这个模块所在的路径
学习自定义的模块时,导入模块的时候,还需要再关注sys.path
3,sys.modules
是我们导入到内存中的所有模块的名字:这个模块的内存地址