python 高级语法 —— 装饰器、迭代器、生成器

python 高级语法 —— 装饰器、迭代器、生成器

老是看了忘,忘了又去看,在此记录一下我的学习笔记,希望下次别忘了

装饰器

  • 使用场景:接手一个新项目时,对项目中已有函数体我们最好不做修改,但是如果我们想改写复用这个函数,这时候就可用到装饰器

  • 例子:

    • 原代码

      def add(a,b):
          return a+b
      

      此处源代码实现的是计算传入参数a+b的值,假设现在有新需求,希望这个代码对用户更友好,输出一定的提示信息。我们当然可以选择直接改这个函数,但是根据前文,最好不要动原有的函数体,这时可以使用装饰器。

    • 修改步骤

      • 1.定义一个闭包函数

      闭包函数:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。

      # 这里的f是外函数的临时变量
      def test_add(f):
          def test(a,b):
              print("接下来将计算您的传入参数和")
              # 在内函数中 用到了外函数的临时变量
              ans = f(a,b)
              print(ans)
          # 外函数的返回值是内函数的引用
          return test
      
      • 2.在原函数上添加@test_add

        此处的 @test_add 其实就是将原函数add作为参数传给test_add(f),即与 add = test_add(add)等价

      @test_add
      def add(a,b):
          return a+b
      
    • 测试

      add(5,6)
      
      • 输出值
      接下来将计算您的传入参数和
      11
      

迭代器与生成器

  • 迭代器:是一种支持next()操作的对象。它包含了一组元素,当执行next()操作时,返回其中一个元素。

  • 生成器:本质上就是一个函数,它记住了上一次返回时在函数体中的位置。
    对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。

  • 例子:

    • 代码

      # test是带有yield的生成器
      def test():
       yield f'1'
       yield f'2'
       yield f'3333'
      
      # 此时g是一个可迭代对象
      g = test()
      
      # 每次next后执行到f中的yied返回的值然后暂停
      # 只有下一次next才会继续执行之后的代码段并在yield返回值后再次暂停
      print(next(g))
      print(next(g))
      print(next(g))
      
      • 输出结果

        1
        2
        3333
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值