首页 > 技术文章 > 常用模块一(random模块、time模块、sys模块)

li-li 2018-08-20 21:15 原文

一、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

         是我们导入到内存中的所有模块的名字:这个模块的内存地址

 

推荐阅读