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

    补充:

    无参装饰器模板

    def wrapper(func):
        def inner(*args, **kwargs):
        	# 在装饰对象前添加功能
            res = func(*args, **kwargs)
            # 在装饰对象后添加功能
            return res
        return inner
    

    有参装饰器模板

    def outer(arg):
        def wrapper(func):
            def inner(*args, **kwargs):
                res = func(*arg, **kwargs)
                return res
            return inner
        return wrapper
    

    生成器:

    • 什么是生成器

      • 生成的工具

        生成器是一个“自定义”的迭代器,本质上是一个迭代器,

    • 如何实现生成器

      • 但凡在函数内部定义了的yield。
      • 调用函数时,函数体代码不会执行
      • 会返回一个结果,该结果就是一个生成器
    • yield

      • 每一次yield都会往生成器对象中添加一个值。

        —yield只能在函数内部定义

        —yield可以保存函数的暂停状态

      # 自定义迭代器
      def func():
          print('from func')
          yield  #yield可以保持函数的
      
                  # 暂停状态,不会被执行
                  
      自定义的迭代器
      def func():
          print('开始准备下蛋')
          print('1---火鸡蛋1')
          yield '火鸡蛋1'
          print('2---火鸡蛋2')
          yield '火鸡蛋2'
          print('3---火鸡蛋3')    # 可以通过yield依次执行函数体代码
          yield '火鸡蛋3'
      
    • yield和return:

      • 相同点:

        ​ 返回的值都是无限制的。

      • 不同点:

        ​ return只能返回一次值,yield可以返回多个值。

    迭代器
    l1 = [1, 2, 3, 4, 5]
    iter_l1 = (l1.__iter__())
    print(iter_l1)  # 得到的是迭代器对象的地址
    
    print(iter_l1.__next__())  
    # 当我们通过__next__取值时,才会执行函数体代码。
    print(iter_l1.__next__())
    
    # 自定义range功能,创建一个自定义的生成器
    
    def my_range(start,end, move =1 ):  #开始,结束,步长
        while start < end:
            yield start
            start += move
    
    g_range = my_range(1, 5)
    print(g_range)
    
    for line in g_range:
        print(line)
    
  • 相关阅读:
    java 学习帮助
    权限
    ftp mybatis
    注解
    hadoop english
    userDao
    发布订阅模式 和委托
    webservice
    rabbitMq视频教程
    blog url.txt
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11861914.html
Copyright © 2011-2022 走看看