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

    # 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成)
    # 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器
    # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
    # 可迭代的.__iter__()方法就可以得到一个迭代器
    # 迭代器中的__next__()方法可以一个一个的获取值
    # from collections import Iterable
    # from collections import Iterator
    # print(isinstance([], Iterator))
    # print(isinstance([].__iter__(), Iterator))
    # print(isinstance([], Iterable))
    #
    #
    # print('__iter__' in dir([].__iter__()))
    # print('__iter__' in dir(123))           # False, int不可迭代
    #
    # # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
    # l = [1,2,3,4]
    # iterator = l.__iter__()
    # print(iterator)
    # print(iterator.__next__())
    # print(iterator.__next__())
    
    
    # for其实就在使用迭代器
    #
    # for i in range(10):                 # 等同于iter = range(10).__iter__()
    #     print(i)                        # 循环执行print(iter.__next__())
    # ----------------------------------------------------------------------------------------------------------------------------------------------
    # #生成器就是一个迭代器,用yield,不能和return公用
    # def generator():
    #     print(1)
    #     yield 'a'
    # yield 'b'
    # yield 'c'
    # # g = generator() # 得到一个生成器作为返回值,实际上是迭代器 # print(g) # print(g.__next__()) # 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 # def feibo(max): # n, a, b = 0, 0, 1 # while n < max: # yield b # a, b = b, a + b # n += 1 # # l = [x for x in feibo(20)] # print(l)

    def generators():
    print(12345)
    content = yield 'qwert'
    print('!!!!!!!!',content)
    yield 'ppppp'

    g = generators()
    g1 = g.__next__()
    print(g1)
    g1 = g.send('hello')
    print(g1)
     
  • 相关阅读:
    转:简单例子说明梯度下降、momentum和学习率衰减
    poj 2112 Optimal Milking(二分+floyd+最大流)
    poj 2112 Optimal Milking(二分+floyd+最大流)
    poj-2728Desert King(最优比率生成树)
    poj-2728Desert King(最优比率生成树)
    C
    C
    cf 567B
    cf 567B
    Codeforces Round #451 (Div. 2) c
  • 原文地址:https://www.cnblogs.com/hhsh/p/9539357.html
Copyright © 2011-2022 走看看