zoukankan      html  css  js  c++  java
  • Python:Day17 生成器、time和random模块

    列表生成式:

    a = [x*2 for x in range(10)]    #这是最简单的列表生成式,range换成其它的序列也OK
    a = [f(x) for x in range(10)]    #将里将前面对变量的操作改为函数也是可以的,这样灵活性就更大了

    变量赋值方式:

    a,b = 10,20
    t = ('123',8)     #不一定要是元组,只要是序列就行
    a,b = t        #变量数量必须要和t中元素一样多,不然报错

    生成器可以通过两种方式创建:

    1、小括号

    2、定义函数,将return换成yield

    s = (x*2 for x in range(1000))  #用小括号括起来就是创建一个生成器对象,中括号就是一个列表生成式
    print(s)    #<generator object <genexpr> at 0x00000000011A0FC0>
    def foo():
        print('ok')
        yield 1     #yield相关于retrun,只不过带有个这关键字,这就不是一个函数了,而是一个生成器
        print('ok2')
        yield 2
    g = foo()   #必须要进行赋值,不然如果next中是foo()的话,执行达不到想要的效果,why???
    next(g)
    next(g)

    生成器创建之后通过两种方式执行:

    1、next

    2、send()  可以传值

    next(s)    #等价于s.__next__()     在py2中是s.next()
    def foo():
        print('ok')
        count=yield 1     #此句先执行yield,然后停止,下一次才执行赋值
        print(count)
        print('ok2')
        yield 2
    g = foo()   
    g.send(None)    #如果没有进入生成器,第一次不能赋值
    g.send(1)   #向里面变量传值

    重新审视for循环:

    for i in s:    #s只要是可迭代对象就可以,可迭代对象有:列表,字典,字符串,生成器等
        print(i)

    for 循环内部三件事:
    1、调用可迭代对象的iter方法返回一个迭代器对象
    2、不断调用迭代器对象的Next方法
    3、处理stopiteration

    iterable和iterator区别

    iterable是可迭代对象,如:列表,字典、字符串等都是可迭代对像,但他们不是iterator

    interator是迭代器,迭代器可以使用next方法

    isinstance(对象,类型)  #用来判断对象是否属于某一类型

    from collections import Iterator,Iterable
    l = [1,2,3,5]
    d = iter(l)    #将对象转换成迭代器
    print(isinstance(l,list))

    模块:

    模块通过import来引用

    时间模块:

    print(help(time))

    Greenwich Mean Time   格林威治平均时间/格林威治标准时间

    UTC:Coordinated Universal Time协调世界时

    #输出结果为结构时间格式:
    print(time.gmtime())    #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=7, tm_min=58, tm_sec=35, tm_wday=3, tm_yday=39, tm_isdst=0)
    print(time.localtime())    #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=15, tm_min=58, tm_sec=35, tm_wday=3, tm_yday=39, tm_isdst=0)
    
    #输出结果为时间戳:
    print(time.time())    #1518077218.8718002
    
    #将结构时间转换成时间戳
    print(time.mktime(time.localtime()))   #1518078086.0
    
    #将时间戳转换成结构时间(其实就是在localtime和gmtime后面加了个时间戳作为参数):
    print(time.localtime(1518078086))   #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=16, tm_min=21, tm_sec=26, tm_wday=3, tm_yday=39, tm_isdst=0)
    print(time.gmtime(1518078086))   #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=8, tm_min=21, tm_sec=26, tm_wday=3, tm_yday=39, tm_isdst=0)
    
    #将结构时间格式输出为指定格式的日期字符串:
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))  #2018-02-08 16:12:36
    
    #将日期字符串转换为结构日期格式:
    print(time.strptime('2018-02-06 19:15:51','%Y-%m-%d %H:%M:%S'))   #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=6, tm_hour=19, tm_min=15, tm_sec=51, tm_wday=1, tm_yday=37, tm_isdst=-1)

    #提取结构时间中相应的值:
    a=time.strptime('2018-02-06 19:15:51','%Y-%m-%d %H:%M:%S')  #只要是结构时间格式就行,
    print(a.tm_year)  #2018,提取结构时间中的年份值
    print(a.tm_mday)  #6,表示为月份中的第几天
    print(a.tm_wday)  #1,表示为一周中的第几天,周一为第0天
    print(a.tm_yday)  #37,表示为一年中的第几天

    #将时间转成固定格式:
    print(time.asctime(time.localtime()))  #Mon Jun 25 21:07:30 2018
    print(time.ctime(time.time())  #Mon Jun 25 21:07:30 2018

    #时间加减
    import datetime
    
    print(datetime.datetime.now())   #2018-02-08 17:10:23.985800
    print(datetime.datetime.now()+datetime.timedelta(-3))   #2018-02-05 17:10:23.985800
    print(datetime.datetime.now()+datetime.timedelta(hours=8))  #2018-02-09 01:10:23.985800
    
    #时间替换
    current_time = datetime.datetime.now()
    print(current_time.replace(minute=2,day=15))    #2018-02-15 17:02:23.444800

    随机数模块:

    import random
    
    print(random.random())   #随机产生[0-1)之间的浮点数
    print(random.uniform(1,4))    #随机产生一个[1,4]之间的浮点数
    #这两个都可以返回浮点数,只是一个可以指定范围,一个不可以
    print(random.randint(1,8))  #返回[1,8]之间的一个整数
    print(random.randrange(1,3))    #从1-2中随机选择一个整数,不包括3,可以添加步长,和range用法差不多
    #这两个都可以返回整数,只是一个可以加步长,一个不可以加
    #上面这4个方法的参数只能是数字,不能是字符串或字母
    print(random.choice('hello'))   #从序列中随机选择一个元素,只能一个,想选多个用sample
    print(random.choice(['hello',4,[123]]))
    print(random.sample(['123',4,[1,2]],2))   #从中随机选择几个,选择几个取决于最后面那个参数
    #这两个都可以返回序列中的某个元素,只是一个可以选多个,一个只能选一个
    item= [1,'a','e',8,'y']
    random.shuffle(item)    #将序列重新洗牌
    print(item)     #[1, 'y', 8, 'a', 'e']

    string模块

    import string
    print(string.digits)    #0123456789
    print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    print(string.ascii_lowercase)   #abcdefghijklmnopqrstuvwxyz
    print(string.ascii_uppercase)   #ABCDEFGHIJKLMNOPQRSTUVWXYZ
    print(string.punctuation)   #!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
  • 相关阅读:
    设计模式-状态模式
    设计模式-策略模式
    Spring MVC 梳理
    Spring MVC 梳理
    设计模式-总结
    Spring boot 梳理
    Spring boot 梳理
    [DP题]最长上升子序列
    NOIP2013 Day1
    20171025日程
  • 原文地址:https://www.cnblogs.com/sq5288/p/8419499.html
Copyright © 2011-2022 走看看