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

    装饰器:

    #模板
    def auth(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) return res return wrapper

    #遵循开放封闭原则:对扩展是开放的,对修改是封闭的。

    #装饰器本身可以可以是任意可调用的对象,被装饰的对象本身也可以是任意可以调用的对象。

    #装饰器遵循的原则:

      1,不修改被装饰对象的源代码

      2,不修改被调用对象的调用方法

    #装饰器的目的:

      在遵循1和2的原则的前提下,为其他函数添加新功能

    #定义了一个函数,想在原函数的基础上增加一个统计函数运行时间的功能
    import time
    def index():
        print('Welcome to index')
    index()
    
    #首先用这个解决方式,这种方式不满足装饰器不改变原函数的规则
    def wrapper(func):
        start=time.time()
        func()
        stop=time.time()
        print('run time is %s' %(stop-start))
    wrapper(index)
    

     利用下面这种方法,可以解决问题:

    import time
    def index():
        time.sleep(3)
        print('Welcome to index')
    
    def timmer():
        func=index
        def wrapper():
            start=time.time()
            func()
            stop=time.time()
            print('run time is %s' %(stop-start))
        return wrapper
    
    index=timmer()
    
    index()
    

     但是如果说想要添加多个功能的时候,我们需要将func=index这行注释:

    import time
    def index():
        time.sleep(3)
        print('Welcome to index')
    
    def home():
        time.sleep(3)
        print('Welcome to home')
    
    def timmer():
        #func=index
        def wrapper():
            start=time.time()
            func()
            stop=time.time()
            print('run time is %s' %(stop-start))
        return wrapper
    
    index=timmer(index)
    home=timmer(home)
    index()
    

    我们可以将index=timmer(index)     home=timmer(home)简写

    #装饰器必须要写到被装饰器的正上方,并且单独一行
    def timmer():
        #func=index
        def wrapper():
            start=time.time()
            func()
            stop=time.time()
            print('run time is %s' %(stop-start))
        return wrapper
    
    #index=timmer(index)
    #home=timmer(home)
    @timmer
    import time
    def index():
        time.sleep(3)
        print('Welcome to index')
    
    @timmer
    def home():
        time.sleep(3)
        print('Welcome to home')
    
    
    index()
    

    被装饰对象是有参函数:

    要让装饰器的函数能够适应各种有参,无参,多参的函数。

    我们可以再装饰其中加入(*args,**kwargs)

    def timmer():
        #func=index
        def wrapper(*args,**kwargs):
            start=time.time()
            res=func(*args,**kwargs)
            stop=time.time()
            print('run time is %s' %(stop-start))
         return res return wrapper #index=timmer(index) #home=timmer(home) @timmer import time def index(): time.sleep(3) print('Welcome to index')
      return 123 @timmer def home(): time.sleep(3) print('Welcome to home')
    #如果函数里边有返回值,例如我们在index()函数中有返回值,我们需要在上面的装饰器里边在定义一层,
    res=func(),在结尾返回一个return res index()

    实现认证功能的装饰器:

    def auth(func):
        def wrapper(*args,**kwargs):
            name=input('input your name').strip()
            password=input('input your password').strip()
            if name == 'yangshuai' and password == '123':
                res=func(*args,**kwargs)
                return res
            else:
                print('login failed')
        return wrapper
    
    @auth
    def index():
        print("login successful")
    
    index()
    

    6-15:11

  • 相关阅读:
    Tensorflow笔记:反向传播,搭建神经网络的八股,(损失函数loss,均方误差MSE,反向传播训练方法,学习率)
    Tensorflow笔记:神经网络的参数,神经网络的搭建,神经网络的前向传播
    Tensorflow笔记:tensorflow 的基本概念(张量,数据类型,计算图,会话)
    PAT (Advanced Level) Practice 1001 A+B Format
    深度学习Tensorflow 之 MNIST手写数字识别
    MNIST数据集介绍及读取
    深度学习Tensorflow非线性回归案列
    TensorFlow 完整的TensorFlow入门教程
    centos7 解决下载速度慢的问题
    Structs复习 ActionMethod
  • 原文地址:https://www.cnblogs.com/sexiaoshuai/p/7250079.html
Copyright © 2011-2022 走看看