首页 > 其他分享 >装饰器2

装饰器2

时间:2023-09-11 20:35:13浏览次数:24  
标签:index get func time print 装饰 def

装饰器

装饰器的简易版本

import time
def index():
    time.sleep(3)
    print('from index')
    
    
def home():
    print('from home')
    
def func():
    print('from func')
    
    
def outer(func_name): 
    # func_name = index 
    def get_time():
        # 1. 函数执行之前打一个时间点
        start_time = time.time()
        func_name() # index() home()


        # 2. 在函数执行之后,在打一个时间点
        end_time = time.time()

        print('总共执行了:%s' % (end_time - start_time))
	return get_time

# get_time(index)
# get_time(home)

index=outer(index)  # res=get_time
index() # get_time()

装饰器解决参数问题

import time
def index():
    time.sleep(3)
    print('from index')
    
    
def home(name, u, a):
    print('from home')
    return 'from home'
def func():
    print('from func')
    
    
def outer(func_name): 
    # func_name = index 
    def get_time(*args, **kwargs): args=() kwargs={'username':jerry, 'age':18}
        # 1. 函数执行之前打一个时间点
        
        start_time = time.time()
        func_name(*args, **kwargs) # index() home()
        res=func_name(name, username='jerry', age=18) # index() home()


        # 2. 在函数执行之后,在打一个时间点
        end_time = time.time()

        print('总共执行了:%s' % (end_time - start_time))
        return res
	return get_time

# get_time(index)
# get_time(home)

index=outer(index)  # res=get_time
index() # get_time()


home=outer(home)  # res=get_time
res=home('kevin', username='jerry', age=18) # get_time()
print(res) #  None


"""认证登录的装饰器,当你访问函数的时候,必须登录之后才能够访问!"""

装饰器的固定模板

def index():
    pass


def outer(func_name):
    def inner(*args, **kwargs):
        '''添加一些函数执行之前的功能'''
        res=func_name(*args, **kwargs) # 这个就是执行的真正的函数
        '''添加一些函数执行之后的功能'''
        return res
    
    return inner

'''装饰器本质上还是函数!'''

@outer
@outer # index=outer(index)
def index():
    pass

# index=outer(index)
index()

"""
1. 语法糖的书写规范
	@装饰器名字
	把语法糖紧贴着写在函数的头部
2. 装饰器原理:
	把被装饰对象当成函数的参数传递给装饰器的形参
"""

双层语法糖

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()

三层语法糖(多层)

# 判断七句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()

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

import time

from functools import wraps
def outer(func):
    @wraps(func) # 修复技术
    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)

有参装饰器(重要)



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(source_type, *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('mysql')

标签:index,get,func,time,print,装饰,def
From: https://www.cnblogs.com/zhangfanshixiaobai/p/17694426.html

相关文章

  • 装饰器双层语法糖三层语法糖以及装饰器修复与有参装饰器
    双层语法糖importtimedefouter(func):defget_time(*args,**kwargs):start_time=time.time()res=func(*args,**kwargs)#只能够统计index函数的时间end_time=time.time()print('执行时间:%s'%(end_time-start_time))......
  • 浙江公园装饰喷漆不锈钢剪影人物雕塑厂家报价
    浙江公园装饰喷漆不锈钢剪影人物雕塑厂家报价不锈钢剪影人物雕塑是使用不锈钢材料造就的艺术品,使用抛光(抛光是利用磨料颗粒对工件表面进行的装扮加工,利用机械的影响,减少工件表面的毛糙程度,来获取光滑的表面)、喷漆(喷涂是水溶性漆料的一种涂刷方法,运用水包油的特征,运用加压喷色枪......
  • Python初步了解装饰器
    Python初步了解装饰器装饰器的概念装饰器的简单使用装饰器的进阶装饰器的练习装饰器的固定模块装饰器的语法糖装饰器的概念装饰器它不是一个新的知识点,它是有之前我们学习的名称空间、函数嵌套、闭包函数等知识点汇总而来器:工具装饰:为其他事物添加功能装饰器:不修该装......
  • 装饰模式(decorator)
    装饰器模式(Decorator)1、作用引入一个设计原则:类应该对扩展开发,对修改关闭。简单的说,就是允许我们的我们的类进行扩展,在不修改现有代码的情况下,适应新的行为改变。当实现好的类有了新的需求,不考虑重用的话,会直接修改(现在写代码都这样,没有满足开闭原则的修改关闭原则),如果考虑代......
  • 深圳商场大堂天花装饰喷漆不锈钢镂空飞猪雕塑厂家报价
    深圳商场大堂天花装饰喷漆不锈钢镂空飞猪雕塑厂家报价不锈钢镂空飞猪雕塑支持材质、样式、风格、尺寸大小等方面的调整修改定制。我们所加工制作的不锈钢镂空飞猪雕塑质优价廉,遍布全国多个省市地区不锈钢镂空大象雕塑是使用不锈钢制作的作品,不锈钢镂空飞猪雕塑给我们生活增添了很多......
  • 【Python-装饰器】无参数简易装饰器示例合集
    无参数装饰器案例​ 一些简易的不携带参数的装饰器合集,用于学习和巩固装饰器方面的知识,配合vscode的Debug功能或者pythontutor网站的运行流程可视化来查看装饰器的工作原理以及运行时机。1.计时器装饰器#计时器装饰器:用于测量函数执行时间。importtimedeftimer(func):......
  • new方法、定制属性访问、描述符与装饰器知识点总结
    一:__new__方法思考:a.我们创建实例是通过什么方法创建的呢?b.类每次实例化的时候都会创建一个新的对象,如果要求类只能被实例化一次该怎么做呢?===通过单利模式实现   c.什么是单例模式(SingletonPattern 1、确保一个类只有一个实例,而且自行实例化并向整个系......
  • 【Python-装饰器】【示例】日志记录装饰器
    #一个简易的日志记录装饰器,用于记录函数执行信息deflog(func):defwrapper(*args,**kwargs):print(f"调用函数{func.__name__},参数:{args},{kwargs}")result=func(*args,**kwargs)print(f"函数{func}执行结果:{result}")retu......
  • 设计模式-装饰模式
    文章目录一、简介二、基本概念三、装饰模式的结构和实现类图解析:装饰器的实现方式继承实现:组合实现:继承和组合对比四、装饰模式的应用场景五、与其他模式的关系六、总结一、简介装饰模式是一种结构型设计模式,它允许动态地向对象添加额外的功能。二、基本概念装饰模式定义:在不改变......
  • 深圳酒店水景装饰不锈钢花篮雕塑厂家报价
    深圳酒店水景装饰不锈钢花篮雕塑厂家报价不锈钢花篮雕塑形式不拘一格。在树立都市形象。引发人们内心美陈共鸣等方面起到不容忽视美陈作用。伴随着消费者要求美陈变化。各种各样新奇有趣、各有特色美陈时尚潮流美陈在制造行业内迅速上台,并变成年青消费者青睐美陈新宠儿,得近些。是精......