zoukankan      html  css  js  c++  java
  • 生成器及推导式

    一、生成器——自己写的函数

    1、只要有yield关键字的函数都是生成器函数

    2、yield关键字不能与return关键字同时使用

    3、return结束函数,yield不结束函数,生成器函数执行之后得到一个生成器作为返回值

    return与yield的区别

    def ger():
        print('hello')
        yield 'Hi'
    ret=ger()
    print(ret)
    #<generator object ger at 0x00000137A9D985E8>#结果
    def ger():
        print('hello')
        return 'Hi'
    ret=ger()
    print(ret)
    #hello#结果
    #Hi

    yield的使用

    def ger():
        print('hello')
        yield 'Hi'
    ret=ger()
    print(ret.__next__())
    #hello结果
    #Hi
    '''
    def ger():
    print('hello')
    yield 'Hi'
    yield '春暖花开'
    ret=ger()
    print(ret.__next__())
    print(ret.__next__())


    #hello
    #Hi
    #春暖花开
    '''
    '''
    def ger():
    print('hello')
    yield 'Hi'
    yield '春暖花开'
    yield '面朝大海'
    ret=ger()
    for fr in ret:
    print(fr)
    #hello结果
    #Hi
    #春暖花开
    #面朝大海
    '''

     二、推导式

    分类:列表推导式(相对用的多)、生成器推导式,字典推导式;

    列表推导式ret=[满足条件的元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关条件]

    例如30以内能被3整除的数的列表推导式:ret=[i for i in range(30) if i%3==0]

    生成器推导式g=(满足条件的元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关条件)

    例如30以内能被3整除的数的生成器推导式:g=(i for i in range(30) if i%3==0)

    例子:

    def add(a,b):
        return a+b
    def rang():
        for i in range(4):
            yield i
    g=rang()
    for n in [1,10,5]:#遇到这样的可拆分为如下'''  '''中的代码
        g=(add(n,i) for i in g)
    '''
    #上面for里的代码等价如下:
    n=1
    g=(add(n,i) for i in g)#(add(n,i) for i in rang())
    n=10
    g=(add(n,i) for i in g)#(add(n,i) for i in (add(n,i) for i in rang()))
    n=5
    g=(add(n,i) for i in g)#g=(add(n,i) for i in (add(n,i) for i in (add(n,i) for i in rang())))#实际执行
    '''
    print(list(g))#

    结果

  • 相关阅读:
    图解修改mysql的默认数据库存放目录
    使用IHTMLDocument2解决弹出"为了让该网站给你提供个人化信息,是否允许在你计算机放置cookie?"
    HTML解析器HtmlAgilityPack的一些使用总结(C#)
    VS2013使用滚动条缩略图、双击选中高亮、配色方案、代码竖虚线(缩进标尺)
    css疑难汇总
    MySQL字段数据类型表
    修改Windows Server 2008密码策略,设置简单密码
    成功进行了一次UDP打洞
    c语言指针疑惑[转载]
    一个转子
  • 原文地址:https://www.cnblogs.com/jcb9426986/p/10758981.html
Copyright © 2011-2022 走看看