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

    python中装饰器应用的场景:装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数。

    个人理解:为实现相同功能作用的函数而封装起来。

    举例:

    import  time#引用时间函数
    start=time.time()
    time.sleep(1)
    end=time.time()
    
    print(end-start)#1.0004706382751465
    print(start)
    def show_time(f):#封装一个装饰器函数,目的是实现每个函数施行多少时间
        def inner(x,y):
            start=time.time()
            f(x,y)
            end=time.time()
            print("spend%s"%(end-start))
    
        return inner
    
    @show_time #等价于foo=show_time(foo)
    def foo():
        print('foo......')
        time.sleep(2)
    
    @show_time #带有参数的装饰器
    def add(x,y):
        print(x+y)
        time.sleep(2)

    【2】带有参数的装饰器

    def logger(flag=''):
        def show_time(f):
            def inner(*x,**y):
                start=time.time()
                f(*x,**y)
                end=time.time()
                print("spend%s"%(end-start))
            if flag=='true':
                print('日志记录')
    
            return inner
        return show_time
    
    @logger('true')#@show_tim
    def add(*a,**b):
        sums=0
        for i in a:
            sums+=i
        print(sums)
        time.sleep(2)

    【3】利用装饰器做一个登录(类似京东的,京东的登录,如果你没有登录在添加商品要购买付款时,都会弹出一个登录界面)

    user,passwd='user',123
    
    loginstatus=False
    
    def login(f):
       def inner():
            if loginstatus==False:
                username = input('username:')
                passwdword =int(input('passwd:'))
               # print(username,passwdword,user,passwd)
               #  print(user ==username )
               #  print(passwd == passwdword)
                if user ==username  and passwd == passwdword:
                    print("welcome......")
                    f()
                    login_status=True
                else:
                    print('登陆失败')
            else:
                pass
       return inner
    
    @login
    def home():#home=login(hoome)
        print("welcome to home page")
    home()
    
    @login
    def finace():#金融
        print("welcome to finace page")
    
    @login
    def book():
        print("welcome ton home page")
  • 相关阅读:
    jQuery万能放大镜插件(普通矩形放大镜)
    Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理
    Mysql增量写入Hdfs(一) --将Mysql数据写入Kafka Topic
    Spark SQL,如何将 DataFrame 转为 json 格式
    贝叶斯分类算法实例 --根据姓名推测男女
    从分治算法到 Hadoop MapReduce
    Actor模型浅析 一致性和隔离性
    写博客的思考
    scala模式匹配详细解析
    [转] Scala 中的异步事件处理
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/9131686.html
Copyright © 2011-2022 走看看