• 2017python学习的第四天,生成器,装饰器迭代器


    #先要认识列表生成器
    a = [x*2 for x in range(10)]
    #他其实就是等于
    # b = []
    # for x in range(10):
    # b.append(x *2)
    # print(a,' ',b)
    #把[]改成()就是生成器
    c = (x*2 for x in range(10))
    print(c)#输出结果就是<generator object <genexpr> at 0x0000000000D17BA0>
    #他其实就是一个等待调用的函数~本身没有结果等待调用的时候才返回结果,用__next__()来调用

    print(c.__next__())
    print(c.__next__())
    print(c.__next__())
    print(c.__next__())
    print(c.__next__())


    ================================================================================
    import time


    #定义消费者的行为过程
    def consumer(name):
    print('%s想要吃包子了'%name)
    # baozi = yield #在这里需要把上面的执行返回并且中断等待,当有值传进来的时候继续执行下面的代码
    while True :
    baozi = yield #在这里需要把上面的执行返回并且中断等待,当有值传进来的时候继续执行下面的代码
    print('包子%s来了,被%s吃了'%(baozi,name))


    #定义生产者的行为过程
    def producer():
    c = consumer('柳黎')
    c1 = consumer('彬彬')
    c.__next__()
    c1.__next__()
    print('生产者开始做包子了')
    for i in range(10):
    time.sleep(1)
    c.send(i)
    c1.send(i)
    producer()





    '''装饰器:
    定义:
    装饰器本质就是一个函数,
    装饰:他就是来装饰其他函数(就是为其他的函数添加附加的功能)
    原则:
    1.不能修改被装饰的函数的源代码.
    2.不能修改被装饰的函数的调用方式
    实现装饰器的知识储备:
    1.函数即“变量”
    2.高级函数
    2.1.把一个函数名当作实参传给另外一个函数。
    2.2.返回值中包含函数名
    3.嵌套函数
    “高阶函数+嵌套函数=”装饰器
    '''
    如果想对装饰器想要比较好一点的了解的话
    就把高阶函数先做一次然后再找个的基础上面再做一次嵌套函数就可以理解了

    import  time

    def timmer(func):
    def warpper(*args,**kwargs):
    start_time=time.time()
    func()
    stop_time=time.time()
    print('the func run time is %s'%(stop_time-start_time))
    return warpper

    @timmer

    def func1():
    time.sleep(3)
    print('this is func1')

    func1()


    '''
    迭代器:
    首先可以循环的数据类型是
    (list,tuple,dict,str,set)
    generator,包括生成器和带yield的generator的function
    这些都是可以直接作用循环的循环体也可以看作是对象,而这些对象被称为可迭代的对象Iterable
    可以用isinstance()来判断是不是iterable

    生成器是可以被next()函数不停调用并且返回下一个值,直到最后无法返回下一个值的时候出现异常Stopiteration
    而!!!可以被next()调用并且返回下一个值的对象叫做迭代器:Iterator!!!
    可以用isinstance()老判断是不是Iterator对象

    我的理解(注意不一定正确)
    Iterable 其实就是一个循环体

    Iterator 其实就是一个函数,他是可以可以被netx()调用并且可以返回值的
    那么Iterable是不是可以变成Iterator呢?
    是可以的


    '''
    a = [1,2,3,4] #a是一个list,也可以说是一个Iterable
    b = iter(a)#这样就可以把他变成一个Itertor了
    #那么b就是可以被next()调用了
    print(next(b))
    print(next(b))
    print(next(b))

    '''
    list,dict,set,tuple 等等为什么就不能是Iterator呢?
    其实最简单的理解方法就是一个[]就是一个固定的值已经确定存在了,而Iterator却是要被调用的时候才有值返回的
    '''




  • 相关阅读:
    GMap.NET 随谈
    Chrome Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
    Java 自定义枚举
    如何得到全国省市经纬度范围
    Jquery formwizard 入门 【前台 向导功能】
    Eclipse Juno 安装 Aptana 3.3,支持jquery智能提示
    Ant学习【实践1】
    euerka总结 当幸福来敲门
    Spring Boot 热启动插件 当幸福来敲门
    ASP.NET 2.0 Provider Model 详细分析
  • 原文地址:https://www.cnblogs.com/Howardandlili/p/6812869.html
Copyright © 2020-2023  润新知