zoukankan      html  css  js  c++  java
  • 《Python学习之路 -- Python基础之生成器》

      生成器可以理解为一种数据类型,这种类型自动遵循了可迭代协议,与其他数据类型不一样,其他数据类型需要通过调用__iter__()方法生成可迭代对象才遵循。也就是说,生成器本质上就是可迭代对象。在Python中,生成器有两种表现形式:生成器函数和生成器表达式

    生成器函数:

    # 生成器函数其实与普通的函数基本一致,不同的是生成器函数通过yield关键字来设置返回值,而且在同一个函数中可以使用多个yield
    def test_yield():
        yield 1
        yield 2
        yield 3
        yield 4
    
    # 调用生成器函数,返回的就是一个生成器对象
    test = test_yield()
    print(test)  # generator object
    # 通过生成器对象就可以直接调用__next__()方法拿到函数中的yield返回值
    print(test.__next__())  # 拿到第一个yield的值 —— 1
    print(test.__next__())  # 拿到第二个yield的值 —— 2
    print(test.__next__())  # 拿到第三个yield的值 —— 3
    print(test.__next__())  # 拿到第四个yield的值 —— 4
    
    # 如果yield之间还存在其他逻辑语句,则也会执行,也就是说,程序遇到yield关键字就暂停,下次执行则会重这个地方开始往下执行
    def test2_yield():
        print('first')
        yield 1
        print('second')
        yield 2
        print('third')
        yield 3
    
    # 拿到生成器对象
    test2 = test2_yield()
    print(test2.__next__())  # first 1
    print(test2.__next__())  # second 2
    print(test2.__next__())  # third 3

    生成器表达式:

    # 生成器表达式:(三元运算符)
    test = (i for i in range(5))
    print(test)  # generator object
    print(test.__next__())  # 0
    print(test.__next__())  # 1
    print(test.__next__())  # 2
    print(test.__next__())  # 3
    print(test.__next__())  # 4
  • 相关阅读:
    JS函数重载解决方案
    JavaScript开发规范
    ASP.Net中表单POST到其他页面的方法
    高效的使用 Response.Redirect
    jQuery性能优化
    百度WebUploader中实现文件上传下载的三种解决方案(推荐)
    WebUploader中实现文件上传下载的三种解决方案(推荐)
    vue中实现文件上传下载的三种解决方案(推荐)
    JavaScript中实现文件上传下载的三种解决方案(推荐)
    ST
  • 原文地址:https://www.cnblogs.com/jonas-von/p/8973741.html
Copyright © 2011-2022 走看看