zoukankan      html  css  js  c++  java
  • 迭代器与生成器

    今日内容:

    迭代器:
    
    可迭代对象:但凡内置有__iter__方法的都是可迭代对象
    
    d1 = d.__iter__()
    d1是个迭代器
    d1.__next__() 
    取下一个值
    可以print出来
    
    迭代器对象:内置有__next__方法的,并且内置有__iter__方法的对象
    迭代器对象.__next__() 得到下一个值
    迭代器对象.__iter__() 得到迭代器本身
    
    文件是迭代器
    
    
    生成器:
    def func():
        yield 1
        yield 2
        yield 5
    g = func()
    g 是个生成器,generator,是个迭代器,,,
    
    g.__next__()
    运行到第一个yield暂停返回
    
    len('www')   __len__()
    next(g)    __next__()
    iter(可迭代对象)  __iter__()
    

    x = yield 返回值

    while True:
        x = yield None
        print('{}'.format(x))
    

    可以一直next
    g = func()

    g.send('狗吃骨头')
    把变量给了x
    g.send(None) 相当于next(g)
    把程序运行到yield处,必须先有yield才能send

    g = dog('a')
    g.send(None) # 先把狗叫过来
    g.send('骨头') #然后喂东西
    g.send('包子')
    ...

    程序挂起,准备好了就运行,等待着值

    g.close()
    关闭生成器

    不能send两个值,可以传一个列表等
    将值给了yield,在传给了x,返回的一直 是 111,
    传给x,运行,返回值

    三元表达式:res = x if 1 > 2 else y
    列表生成式:l = [x for x in l if x.startswith('a')]
    字典生成式:dic = {key:None for key in keys}
    res = {k:v for k,v in items if k != 'gender'}

    res = ()
    生成生成器,元组不可变

    递推
    回溯

    从回溯最终结果回溯到最初,再从最初的值递推得出最终的结果

  • 相关阅读:
    prototype 和function关系等总结
    js作用域的几个问题
    关于对象引用的作用域
    深刻理解下js的prototype
    如何判断一个对象是数组
    理解js的几个关键问题(2): 对象、 prototype、this等
    更新触发器
    sql事物和try catch
    图片与base64编码互换
    UCML点击BPO报异常
  • 原文地址:https://www.cnblogs.com/pythonwl/p/12560350.html
Copyright © 2011-2022 走看看