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

    day14

    装饰器

    装饰器本质就是闭包

    开放封闭原则:

    扩展是开放的(增加新功能),对源码是封闭的(修改已经实现的功能)

    装饰器:用来装饰的工具

    作用:在不改变源代码及调用方式的基础下额外增加新的功能

    应用(面试的时候): 登录认证、日志

    ​ 增加一些功能

    ​ 校验用户登录的时候

    ​ 面向对象

    语法糖 -- 甜:@+函数名

    语法糖必须放在被装饰的函数正上方

    # import time
    # def times(f):
    #     def inner():
    #         start_time = time.time()
    #         f()
    #         print(time.time() - start_time)
    #     return inner
    # def foo():
    #     time.sleep(1)
    #     print('我是立业,我快!')
    # foo = times(foo)
    # foo()
    
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         f(*args,**kwargs)
    #     return inner
    # def func(*args,**kwargs):
    #     print(f"这是{args,kwargs}函数")
    # func = wrapper(func)
    # func('alex','sir')
    版一
    # import time
    # start_time = time.time()
    # def func():
    #     time.sleep(1)
    #     print('我要飞')
    # func()
    # print(time.time() - start_time)
    版二
    # def times(f):
    #     start_time = time.time()
    #     f()
    #     print(time.time() - start_time)
    #
    # def foo():
    #     time.sleep(1)
    #     print('小明')
    #
    # def func():
    #     time.sleep(1)
    #     print('章超印')
    # s = func
    # func = times
    # func(s)
    
    # s = foo
    # foo = times
    # foo(s)
    版三
    # def times(f):
    #     def inner():
    #         start_time = time.time()
    #         f()
    #         print(time.time() - start_time)
    #     return inner
    #
    # def foo():
    #     time.sleep(1)
    #     print('小明')
    # foo = times(foo)
    # foo()
    
    # def wrapper():
    #     def inner():
    #         print(1)
    #     return inner
    # wrapper()()
    
    # def wrapper():
    #     def inner(f):
    #         print(f)
    #     return inner
    #
    # def func():
    #     print('小明')
    # func = wrapper()
    # func('alex')
    版四
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         f(*args,**kwargs)
    #     return inner
    # def func(*args,**kwargs):
    #     print(f'{args,kwargs}')
    # func = wrapper(func)
    # func(1,2,2,3,4,5,5,a=1,b=2)
    
    # import time
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         start_time = time.time()
    #         f(*args,**kwargs)
    #         print((time.time() - start_time))
    #     return inner
    # def func(*args,**kwargs):
    #     print(f'{args,kwargs}')
    #     time.sleep(1)
    # func = wrapper(func)
    # func(1,2,3,4,54,5,a = 1, b =2)
    版五
    # import time
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         start_time = time.time()
    #         print(f(*args,**kwargs))
    #         return time.time() - start_time
    #     return inner
    # @wrapper
    # def func(*args,**kwargs):
    #     time.sleep(1)
    #     print(f'{args,kwargs}')
    #     return 'alex'
    # @wrapper
    # def foo(*args,**kwargs):
    #     time.sleep(1)
    #     print(f'{args,kwargs}')
    # print(func(1,2,3,4,54,5,a = 1, b =2))
    # print(foo(1523,2,541,5165,12,6,a='alex',b='eeeee'))
    标准版
    def func(a):  #a是要被装饰的函数名
        def foo(*args,**kwargs):
            "装饰之前的操作"
            ret = a(*args,**kwargs)
            "装饰之后的操作"
            return ret
        return foo
    @func
    def f1(*args,**kwargs):
        print(f"这是一个{args}")
        return "我可以返回了"
    print(f1(1,2,3,34,4,5,a=1))
    博客园
    # login_dic = {
    #     "username": None,
    #     "flag": False
    # }
    # def auth(f):
    #     def inner(*args,**kwargs):
    #         if login_dic["flag"]:
    #             return f()
    #         else:
    #             return login()
    #     return inner
    # @auth
    # def index():
    #     print(f"这是{login_dic['username']}主页")
    #     return "主页没有内容"
    # def login():
    #     print("这是一个登录页面")
    #     user = input("username:")
    #     pwd = input("password:")
    #     if user == "baoyuan" and pwd == "baoyuan123":
    #         login_dic["flag"] = True
    #         login_dic["username"] = user
    #         return "登录成功!"
    #     else:
    #         return "用户名或密码错误!"
    # @auth
    # def comment():
    #     print(f"这是{login_dic['username']}评论")
    #
    # while not login_dic["flag"]:
    #     print(comment())
    
  • 相关阅读:
    蜘蛛禁止访问文件
    基于PhalApi的Smarty拓展 (视图层的应用)
    MySQL数据库存表情
    查看PHP版本等相关信息
    读取数据库表信息
    nginx简介
    Redis发布订阅
    Redis持久化
    Redis主从复制
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11284913.html
Copyright © 2011-2022 走看看