• python之路——装饰器函数


    装饰器

    
    
    print(time.time()) 时间戳
    time.sleep(1) 停一秒
    装饰器的意义:对于用户来讲 你感知不到装饰器的存在 在一个函数的前后添加功能
    import time  #时间模块
    
    def func1(): 
        print('in func1')
    
    def timer(func):
        def inner():
            start = time.time() #time.time 时间戳
            func()
            print(time.time() - start)
        return inner
    
    func1 = timer(func1)
    func1()
    装饰器一简单版
    import time
    def timer(func):
        def inner():
            start = time.time()
            func()
            print(time.time() - start)
        return inner
    
    @timer   #==> func1 = timer(func1)   #@timer 语法糖
    def func1():
        print('in func1')
    
    
    func1()
    装饰器-语法糖

      装饰器的本质:一个闭包函数

      装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

    def timer(func): #func 参数
        def inner(a):
            start = time.time()
            func(a)
            print(time.time() - start)
        return inner
    
    @timer
    def func1(a):
        print(a)
    
    func1(1)
    装饰器-带参数的装饰器

    其实装饰带参的函数并不是什么难事,但假如你有两个函数,需要传递的参数不一样呢?如下图:

    import time
    def timer(func):
        def inner(*args,**kwargs):
            start = time.time()
            re = func(*args,**kwargs)
            print(time.time() - start)
            return re
        return inner
    
    @timer   #==> func1 = timer(func1)
    def func1(a,b):
        print('in func1')
    
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
    
    func1('aaaaaa','bbbbbb')
    print(func2('aaaaaa'))
    装饰器-成功hold住所有函数传参
    import time
    def timer(func):
        def inner(*args,**kwargs):
            start = time.time()
            re = func(*args,**kwargs)
            print(time.time() - start)
            return re
        return inner
    
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
    
    func2('aaaaaa','bbbbbb')
    print(func2('aaaaaa'))
    装饰器-带返回值的装饰器

    开放封闭原则:

    1开放 对扩展是开放的 

    2封闭 对修改是封闭的

     装饰器的主要功能和装饰器的固定结构:

    装饰器的主要功能:

    在不改变函数调用方式的基础上在函数的前、后添加功能。

    装饰器的固定格式:

    def timer(func):
        def inner(*args,**kwargs):
            '''执行函数之前要做的'''
            re = func(*args,**kwargs)
            '''执行函数之后要做的'''
            return re
        return inner
    装饰器格式-需要牢记、背会
    def wrapper1(func):
        def inner():
            print('wrapper1 ,before func')
            func()
            print('wrapper1 ,after func')
        return inner
    
    def wrapper2(func):
        def inner():
            print('wrapper2 ,before func')
            func()
            print('wrapper2 ,after func')
        return inner
    
    @wrapper2
    @wrapper1
    def f():
        print('in f')
    
    f()
    多个装饰器 装饰一个函数
  • 相关阅读:
    【火炉炼AI】机器学习003-简单线性回归器的创建,测试,模型保存和加载
    【火炉炼AI】机器学习002-标记编码方法
    【火炉炼AI】机器学习001-数据预处理技术(均值移除,范围缩放,归一化,二值化,独热编码)
    HOJ 13830 DNA Sequencing
    HDU 6078 Wavel Sequence
    hoj 13814 Cake cut
    HDU6071 Lazy Running
    HDU 6070 Dirt Ratio
    HDU 6070 Dirt Ratio
    HDU 6059 Kanade's trio
  • 原文地址:https://www.cnblogs.com/bsxq/p/7459974.html
Copyright © 2020-2023  润新知