zoukankan      html  css  js  c++  java
  • 9-装饰器

    装饰器基础

    • 使用装饰器可以增加程序的灵活性,减少耦合度,适合使用在用户登陆检查、日志处理等方面

    • 装饰器语法

      • # Python装饰器语法:
        def out(f):
            def inner():
                f()
                print('这里写增加的装饰功能')
            return inner
        
      • 闭包

      • 装饰器内部调用函数

      • 函数的上下添加装饰

    • 函数调用

      • house = out(house)
        • # print(house._name_) # inner,house指向inner函数
      • house指向的函数是装饰器的内部函数(inner)
    • 给函数加装饰器

      • @装饰器

    通用装饰器

    • 通用指的是带通用参数

    • 通用装饰器语法

      • def outer2(f):
            def inner(*args, **kwargs):
                print('开始唱歌了')
                r = f(*args, **kwargs)
                print('唱完了')
                return r
            return inner
        
        @outer2
        def sing2(singer, song, a):
            print(singer, '唱:', song, a)
            return 'Nice'
        
        result = sing2('贾玲', '老女孩', a=1)
        print(result)
        '''
        开始唱歌了
        贾玲 唱: 老女孩 1
        唱完了
        Nice
        '''
        
      • 如果原函数有返回值,那么装饰器函数也要有返回值进行返回,这样才能确保对原函数不做修改

    • 装饰器调用时使用参数

      • # 装饰器调用时使用参数,相当于多加了一个参数层
        def outer(is_hello):
            def inner(f):
                def inner_inner(*args, **kwargs):
                    if is_hello == 'hello':
                        print('hello Python')
                        return f(*args, **kwargs)
                    else:
                        return f(*args, **kwargs)
                return inner_inner
            return inner
        
        @outer('hello')  # 加装饰器
        def f_temp(*args, **kwargs):
            print(*args, **kwargs)
        
        # 调用
        f_temp('你好,世界')
        '''
        hello Python
        你好,世界
        '''
        
      • 如果装饰器在调用时使用了参数,那么装饰器函数只会使用这些参数进行调用,因此需要返回一个新的装饰器函数,这样就与普通的装饰器一致

    栈和队列

      • 栈:一种数据结构

      • 特点:先进后出,后进先出

      • 列表可以实现栈结构,控制只在一端(只在列表末尾)插入append和取出pop

      • from queue import LIFOQueue

        • from queue import LifoQueue
          stack = LifoQueue(maxsize=3)
          stack.put('hello')
          stack.put('world')
          print(stack.get())  # world
          print(stack.get())  # hello
          
    • 队列

      • 队列:一种数据结构

      • 特点:先进先出,后进后出,类似排队

      • 创建队列

        • # 创建队列
          import collections.abc
          queue = collections.deque()
          print(queue)  # deque([])
          
      • 入队列:append

      • 出队列:popleft

  • 相关阅读:
    iOS tableViewCell自适应高度 第三发类库
    iOS 用 SDWebImage 清理图片缓存
    iOS JsonModel 的使用
    Objective-C语法之KVO使用
    iOS开发之 用第三方类库实现轮播图
    OS开发UI篇—使用UItableview完成一个简单的QQ好友列表
    iOS tableView 静态单元格的实现
    iOS沙盒目录结构解析
    ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
    AFNetworking 3.0.4 的使用
  • 原文地址:https://www.cnblogs.com/lotuslaw/p/14007494.html
Copyright © 2011-2022 走看看