zoukankan      html  css  js  c++  java
  • 装饰器,生成器,迭代器

    装饰器:  
      器:代表函数
      装饰:装饰其他函数


      装饰器原则:
        不能修改被装饰函数的源代码
        不能修改被装饰函数的调用方式


      实现装饰器:
        1 函数即变量 (匿名函数没有函数名,使用完就会被回收)
        2 高阶函数
          a:把一个函数名当做实参传给另外一个函数
          b:返回值中包含函数名
        3 嵌套函数
          a:在函数体内用def声明一个函数

        4 闭包:函数接受的参数可以传递给内嵌函数里

      一个简单的装饰器:

        def timer(func):
          def test2(*args): # 可变参数能接收不一样的环境
            start_time = time.time()
            func(*args)
            end_time = time.time()
            print("时间间隔是: --> %s " % (end_time - start_time) )
          return test2    # 返回的一定是函数名, 不能带(), 否则会出错
    
    
          @timer
          def test1():
            time.sleep(3)
            print('in test1')

     

      用法:

        在要被装饰的函数前加上@装饰器名, 这句话相当于test1 = timer(test1)

    列表生成式:
      [ i*i for i in range(10) ]

    生成器:
      分为列表生成器和函数生成器
        注意, 生成器只能迭代一次, 使用完了就完了, 在处理超大数据的时候合适
      列表生成器:
        将列表生成器的中括号换成小括号
          ( i*i for i in range(10) )

      与list的区别;
        调用时候才生成, 特别快, 不使用不占内存
        不支持切片
        只记录当前位置, __next__()方法

      函数生成器:
        yield:返回一个值, 此时程序等待下次调用, 处于挂起状态
        send:可以给yield传值

      生成器的例子:
    import time
    
    def consumer(name):
        print("ready for beef")
        while True:
            beef = yield
            print("beef %s comes, eaten by %s" % (beef, name))
    
    
    def producer(name):
        c1 = consumer('A')
        c2 = consumer('B')
        c1.__next__()
        c2.__next__()
        print("doing meet beef")
        for i in range(3):
            time.sleep(1)
            print("1 beef made, 2 copule")
            c1.send(i)
            c2.send(i)
    
    
    producer("hinimix")
     
    迭代器:
      生成器是迭代器(Iterator), list,dict,str是可以迭代的, 但是不是迭代器
      迭代器转换iter()

      注意
        凡是可作用与for循环的都是Iterable类型
        凡是可作用于next()函数的对象都是Iterator类型,
  • 相关阅读:
    mysql(一)
    spring
    数据库连接池
    spring jdbctemplate
    HDU-4219-Randomization?
    离线赛总结
    HDU-4507-吉哥系列故事-恨7不成妻
    HDU-1204-糖果大战
    [BZOJ1150][CTSC2007]数据备份
    二分图学习笔记
  • 原文地址:https://www.cnblogs.com/hinimix/p/8080075.html
Copyright © 2011-2022 走看看