首页 > 其他分享 >装饰器双层语法糖三层语法糖以及装饰器修复与有参装饰器

装饰器双层语法糖三层语法糖以及装饰器修复与有参装饰器

时间:2023-09-11 19:26:22浏览次数:44  
标签:index 双层 auth 语法 time print return 装饰 def

双层语法糖

import time

def outer(func):
    def get_time(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)  # 只能够统计index函数的时间
        end_time = time.time()
        print('执行时间:%s' % (end_time - start_time))
        return res

    return get_time

def login_auth(func):
    # func = index
    def auth():
        username = input('username:>>>').strip()
        password = input('password:>>>').strip()
        # 2. 比较用户名和密码
        if username == 'jerry' and password == '123':
            # 执行函数
            print('登录成功')
            func()
        else:
            print('用户名或者密码错误')
    return auth

@login_auth # index=login_auth(get_time) # index=auth
@outer      # get_time=outer(index)
def index():
    time.sleep(3)
    print('from index')

index() # auth()

pPgujUg.png

三层语法糖

# 判断七句print执行顺序
def outter1(func1):
    print('加载了outter1')
    def wrapper1(*args, **kwargs):
        print('执行了wrapper1')
        res1 = func1(*args, **kwargs)
        return res1
    return wrapper1

def outter2(func2):
    print('加载了outter2')
    def wrapper2(*args, **kwargs):
        print('执行了wrapper2')
        res2 = func2(*args, **kwargs)
        return res2
    return wrapper2

def outter3(func3):
    print('加载了outter3')
    def wrapper3(*args, **kwargs):
        print('执行了wrapper3')
        res3 = func3(*args, **kwargs)
        return res3
    return wrapper3


@outter1
@outter2
@outter3
def index():
    print('from index')
index()

pPgK9vq.png

装饰器的修复技术(了解即可)

import time

from functools import wraps
def outer(func):               
    @wraps(func) # 修复技术          # 修复技术就加上 2 4 两句话即可这是完整装饰器的写法
    def get_time():
        start_time = time.time()
        func()  # 只能够统计index函数的时间
        end_time = time.time()
        print('执行时间:%s' % (end_time - start_time))
    return get_time

# @outer  # index=outer(index)
def index():
    print('from index')

'''修复技术就是为了让装饰器伪装的更像'''   
# index()
# print(index) # <function index at 0x000002F69849A940>
# print(index) # <function index at 0x000002F69849A940>
# help(index)   

@outer
def home():
    '''这是home函数'''

help(home)  # help的作用是查看本质

有参装饰器(重要)

def outter(source_type, *args1, **kwargs1):
    # 'file', 1, 2, 3, 4, 5, 6,
    # source_type = 'file'
    def login_auth(func):  # 参数个数只能有一个
        def auth(*args, **kwargs): #
            username = input('username:>>>').strip()
            password = input('password:>>>').strip()
            # 2. 比较用户名和密码
            """
                1. 文件中获取用户名和密码
                2. 从MySQL中获取用户名和密码
                3. 从oracle中获取用户名和密码
                4. 从postgresql中获取用户名和密码
            """
            # print(a, b, c, d, e, f)
            if source_type == 'file':
                print('文件中获取用户名和密码')
            elif source_type == 'mysql':
                print('从MySQL中获取用户名和密码')
            elif source_type == 'oracle':
                print('从oracle中获取用户名和密码')
            elif source_type == 'postgresql':
                print('从postgresql中获取用户名和密码')

            if username == 'jerry' and password == '123':
                # 执行函数
                print('登录成功')
                func( *args, **kwargs)
            else:
                print('用户名或者密码错误')
        return auth
    return login_auth

@outter('file', 1, 2, 3, 4, 5, 6,) # login_auth(home, file)
# @login_auth # login_auth(home, file)
def home():
    pass

home()

标签:index,双层,auth,语法,time,print,return,装饰,def
From: https://www.cnblogs.com/wolongnp/p/17694266.html

相关文章

  • MarkDown语法
    •推荐文本编辑器:Typora•文件后缀;xxx.md •样式:     标题     字体样式     链接,列表     表格      图片      代码      。。。。。......
  • ArcEngine打开表FROM子句语法错误
    在打开mdb属性表(Table时)中报错FROM子句语法错误。位置在ESRIArcGISGeodatabaseIFeatureWorkspaceOpenTable(StrinaName),分析数据后,发现是因为表名以~TEP开头。这是临时文件,无法打开,打开表时应该跳过这样的表。......
  • Lua04——基本语法
    1注释单行注释--单行注释多行注释--[[多行注释]]2标识符标识符用于定义变量,作为变量名在程序中使用。以字母及下划线开头,可以包含数字。需要注意的是:不能定义为下划线+大写字母,避免与Lua中的保留字冲突;标识符中不能包含@$%等特殊字符;lua中字母区分大小写3全局变量在默认情......
  • 浙江公园装饰喷漆不锈钢剪影人物雕塑厂家报价
    浙江公园装饰喷漆不锈钢剪影人物雕塑厂家报价不锈钢剪影人物雕塑是使用不锈钢材料造就的艺术品,使用抛光(抛光是利用磨料颗粒对工件表面进行的装扮加工,利用机械的影响,减少工件表面的毛糙程度,来获取光滑的表面)、喷漆(喷涂是水溶性漆料的一种涂刷方法,运用水包油的特征,运用加压喷色枪......
  • Vue源码学习(三):<templete>渲染第二步,创建ast语法树
    好家伙,书接上回 在上一篇Vue源码学习(二):<templete>渲染第一步,模板解析中,我们完成了模板解析现在我们继续,将模板解析的转换为ast语法树 1.前情提要代码已开源https://github.com/Fattiger4399/analytic-vue.git手动调试一遍,胜过我解释给你听一万遍functionstart......
  • Python初步了解装饰器
    Python初步了解装饰器装饰器的概念装饰器的简单使用装饰器的进阶装饰器的练习装饰器的固定模块装饰器的语法糖装饰器的概念装饰器它不是一个新的知识点,它是有之前我们学习的名称空间、函数嵌套、闭包函数等知识点汇总而来器:工具装饰:为其他事物添加功能装饰器:不修该装......
  • 走进JavaScript基础语法
    点击链接走进前端学习:https://blog.csdn.net/qq_53810245/article/details/116831968@目录JavaScript1、概述2、基本语法入门2.1定义变量2.2浏览器控制台使用在这里插入图片描述2.3数据类型1.变量命名:以$或_开头标识2.number:3.字符串:'abc',''abc''4.布尔值:true,false5.逻......
  • Google Hacking语法总结
    GoogleHacking语法总结GoogleHacking是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要的信息。轻量级的搜索可以搜素出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露,源代码泄露,未授权访问等等,重量级的则可能是mdb文件下载,CMS未被锁定install页面,网站......
  • 装饰模式(decorator)
    装饰器模式(Decorator)1、作用引入一个设计原则:类应该对扩展开发,对修改关闭。简单的说,就是允许我们的我们的类进行扩展,在不修改现有代码的情况下,适应新的行为改变。当实现好的类有了新的需求,不考虑重用的话,会直接修改(现在写代码都这样,没有满足开闭原则的修改关闭原则),如果考虑代......
  • Python语法(1)
    我们准备开始学习python语法,大概会分为几个上传,但都已经排好序这里我们主要通过和C语言进行比较着学习,方便明白区别和相同语法基础首先我们需要熟悉Python语言中的语法规则:变量常见的数据类型:int整数123float浮点数1.34str字符串'python'bool布尔类型T......