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

    __author__ = '12711'
    #-*- coding:utf-8 -*-
    '''
    g=(i*2 for i in range(10))
    print(g)
    print(next(g))
    next(g)

    print( g.__next__())
    # g.__next__()
    # for i in g:
    # print(i)
    '''
    '''
    #1,1,2,3,5,8
    def fib(s):
    n,a,b=0,0,1
    while n<s:
    #print(b)
    yield b
    a,b=b,a+b
    n+=1
    return 'ha'
    f=fib(6)
    print(f)
    # print(f.__next__())
    # print(f.__next__())
    # print("干点好事")
    # print(f.__next__())
    for i in fib(6):
    print(i)
    #这里,最难理解的就是generator和函数的执行流程不一样。
    # 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
    # 而变成generator的函数,
    # 在每次调用next()的时候执行
    # ,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
    '''
    '''
    import time
    def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
    baozi = yield

    print("包子[%s]来了,被[%s]吃了!" %(baozi,name))


    def producer(name):
    c = consumer(name)
    #c2 = consumer(name)
    c.__next__()
    #c2.__next__()
    print("老子开始准备做包子啦!")
    for i in range(10):
    time.sleep(1)
    print("做了1个包子!")
    c.send(1)
    #c2.send(i)

    producer("alex")
    '''

    '''
    迭代器
    我们已经知道,可以直接作用于for循环的数据类型有以下几种:

    一类是集合数据类型,如list、tuple、dict、set、str等;

    一类是generator,包括生成器和带yield的generator function。

    这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

    可以使用isinstance()判断一个对象是否是Iterable对象:
    '''
    from collections import Iterable
    print(isinstance([],Iterable))
    print(isinstance((i*2 for i in range(10)),Iterable))
    #可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    #可以使用isinstance()判断一个对象是否是Iterator对象:
    from collections import Iterator
    print(isinstance((i*2 for i in range(10)),Iterator))
    print(isinstance([],Iterator))
    # 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
    #
    # 把list、dict、str等Iterable变成Iterator可以使用iter()函数:
    print(isinstance(iter([]),Iterator))
  • 相关阅读:
    PAT1134:Vertex Cover
    PAT1107:Sum of Number Segments
    PAT1009:Product of Polynomials
    力扣练习003---先序遍历构造二叉树(1008)
    力扣练习002---设计循环队列(622)
    力扣练习001---基本计算器(224)
    基础算法 --- 前缀和与差分
    数据结构 --- 二叉树
    基础算法 --- DFS(深度优先搜索)
    基础算法 --- BFS(广度优先搜索/宽度优先搜索)
  • 原文地址:https://www.cnblogs.com/hjdshizhidong/p/9719722.html
Copyright © 2011-2022 走看看