zoukankan      html  css  js  c++  java
  • 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却是要被调用的时候才有值返回的
    '''




  • 相关阅读:
    SQL Functions
    wse 3.0
    mvc2 在 .net 4 下的ValidateInput(false) 无效
    FF3.0 不可以post空
    也谈.NET MVC 2 + ExtJS的部署问题
    ExtJs懒人笔记(2) ExtJs页面布局
    关于算法—— 一维字符串数组之间组合问题的C#实现
    (转)在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
    XML中配置正则表达式的写法
    .NET MVC 下实现消息推送
  • 原文地址:https://www.cnblogs.com/Howardandlili/p/6812869.html
Copyright © 2011-2022 走看看