zoukankan      html  css  js  c++  java
  • 生成器

    1.1生成器函数:带yield语句的函数成为生成器函数,生成器函数的返回值是生成器

    def gen():
        print('a')
        yield 1
        print('b')
        yield 2
        return 3
    #执行生成器函数的时候,函数体并没有背执行
    g = gen()
    #执行到第一个yield的时候停止执行
    next(g)
    #从第一个yield之后开始执行,在第二个yield之前停止执行
    next(g)
    #从第二个yield开始执行,当没有更多yield的时候,抛出stopiteration异常,异常的值正好是返回值
    

      

    生成器函数执行的时候不会执行函数体

    当next一个生成器的时候,会执行到第一个yield语句,会弹出值,并且暂停函数

    当再次next生成器的时候,从上次暂停处开始往下执行

    当没有多余的yield的时候,会抛出stopiteration异常。异常的值是函数的返回值

    def dedupe(item):
        seen = set()
        for items in item:
            if items not in seen:
    #            print('this is  a item {}'.format(items))
                yield items
            seen.add(items)
    #        print('this is a set {}'.format(seen))
    
    lst =[1,5,2,1,9,1,5,10]
    #generator本身就是一个iterator,所以肯定是iterable的 所有list后面可以放yield的返回值
    print(list(dedupe(lst)))
    #next 执行到第一个yield的时候停止执行,在次执行next的时候,从seen.add(items)上执行
    
    # print(next(func))
    

      

    for example :更好的理解list(generator)
    def take (n):
        for i in range(n):
            yield i
    
    l = list(take(4))
    
    >>> l = [0,1,2,3]
    

    yield from 是python3.3以后新出现的语法

    def cocunter(n):
        for x in range(n):
            yield x
    def inc(n):
        yield from cocunter(n)
    
    foo = inc(10)
    for x in foo:
        print(x)
    def cocunter(n):
        for x in range(n):
            yield x
    def inc(n):
        yield cocunter(n)
    
    foo = inc(10)
    print(foo)
    for x in foo:
        print(x)
        for j in x:
            print(j)
    本文为原创文章,转载请标明出处
  • 相关阅读:
    SAP库存账龄分析报表
    elasticsearch 同义词配置搜索
    elasticsearch 上下文
    git 修改源路径 修改项目地址
    intellij IDEA 无限试用
    Kubernetes 安装Redis集群
    helm安装ingress
    安装Helm
    Kubernetes Rook + Ceph
    GIT 将工作区恢复到上次提交的内容 commit your changes or stash them before you can merge Your local changes to the following files would be overwritten by merge
  • 原文地址:https://www.cnblogs.com/harden13/p/6379411.html
Copyright © 2011-2022 走看看