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

    1.定义

      本质上是函数,用来装饰其他函数,给函数添加新的功能

      常用的形式:setter、getter

    @property
    def password(self):
        return self._password
    @password.setter
    def password(self, pwd):
        self._password = werkzeug.security.generate_password_hash(pwd)  # _password存入的是密文

    2.原则

    •   不改变原来的函数代码
    •   不改变原来函数的调用方式

    3.定义装饰器

    def timmer(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            func(args[0])
            end_time = time.time()
            print('fun1 run time is %s' %(end_time - start_time))
        return wrapper
    
    @timmer  # 等价于:fun1 = timmer(fun1), 此时fun1先指向函数1,然后指向新的函数wrapper
    def fun1(a):
        time.sleep(3, a)
        print('fun1...')
    
    if __name__ == '__main__':
        fun1(10)   # 装饰器的实现原理: fun1 = timmer(fun1); fun1(10)

      本质上将函数指向新的函数地址。

    4.高阶函数

    • 把一个函数名当做实参传递给一个函数 
    • 返回值中包含函数名

    5.嵌套函数-函数即变量

    6.参数,返回值

      嵌套函数的参数就是源函数的参数。

    def timmer(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            print('fun1 run time is %s' %(end_time - start_time))
         return result
    return wrapper @timmer # 等价于:fun1 = timmer(fun1), 此时fun1先指向函数1,然后指向新的函数wrapper def fun1(a): time.sleep(3, a) print('fun1...') if __name__ == '__main__': fun1(10) # 装饰器的实现原理: fun1 = timmer(fun1); fun1(10)

    7.装饰器的参数

    @timmer(param = '')

    import time
    
    def wrapper(options)
      def inner(func, *args, **kargs):
        pass
      return inner

    # 有括号,就立刻执行wrapper函数,所以@wrapper({}) 等价于@inner # inner = wrapper({}) ==> @inner
    # index = inner @wrapper({'key':'value'}
    )
    def index(a,*b): print('fun1...', a, b) if __name__ == '__main__': fun1(10, 20, 20)

    8. ContentManager装饰器

    借助这个装饰器,可以省略__enter__()  __exit__()

  • 相关阅读:
    我的Android app开发生涯
    极客学院
    区分H5和native页面
    H5之测试工具
    放最多水
    数组去重 快慢指针
    搜索插入位置 二分查找
    this指向
    JS 抖动和节流
    图片懒加载和预加载
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/9310741.html
Copyright © 2011-2022 走看看