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))#

    结果

  • 相关阅读:
    QTableWidget的使用和美工总结
    pyqt下QTableWidget使用方法小结(转)
    改变QTableWidget 行高(转)
    Qt中 文件对话框QFileDialog 的使用
    Qt:拖拽图片到QLabel上并显示(转)
    Qt获取组合键(转)
    Qt图片显示效率的比较(转)
    QComboBox用法小列(转)
    TinyXML:一个优秀的C++ XML解析器(转)
    JZOJ 3099. Vigenère密码 NOIP2012
  • 原文地址:https://www.cnblogs.com/jcb9426986/p/10758981.html
Copyright © 2011-2022 走看看