python基础学习-装饰器基本原理

Posted python学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础学习-装饰器基本原理相关的知识,希望对你有一定的参考价值。

#__author:"Feng Lin"
#date: 2018/8/29
#装饰器:在不修改函数的调用方式,但是还是想在原来的函数前后添加功能
#如下:timer 就是一个装饰器函数,支队一个函数有一些装饰作用
#使用闭包是实现装饰器的基本原理
import time
# def func():
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
# def timer(func): #装饰函数
#     def inner():
#      start=time.time()
#      func()  #被装饰函数
#      end=time.time()
#      print(end-start)
#     return inner
# func=timer(func)
# func()

#装饰带参数的装饰器

# def timer(func): #装饰函数
#     def inner(x):
#      start=time.time()
#      func(x)  #被装饰函数
#      end=time.time()
#      print(end-start)
#     return inner
# @timer #语法糖 @timer与func=timer(func)等价
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿",x)
# func(1)

#装饰带参数和返回值一个值的装饰器

# def timer(func): #装饰函数
#     def inner(x):
#      start=time.time()
#      ret=func(x)  #被装饰函数
#      end=time.time()
#      print(end-start)
#      return ret
#     return inner
# @timer
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x
# print(func(1))

# #装饰带参数和返回多个值的装饰器
#
# def timer(func): #装饰函数
#     def inner(*args):
#      start=time.time()
#      ret=func(*args)  #被装饰函数
#      end=time.time()
#      print(end-start)
#      return ret
#     return inner
# @timer
# def func(x):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x
# print(func([1,2]))

#装饰带参数和返回任意类型的返回值的装饰器

# def timer(func): #装饰函数
#     def inner(*args,**kwargs):
#       start=time.time()
#       ret=func(*args,**kwargs)  #被装饰函数
#       end=time.time()
#       print(end-start)
#       return ret
#     return inner
# @timer
# def func(x,y):
#     time.sleep(0.01)
#     print("哈哈嘿嘿")
#     return x,y
# print(func([1,2],y=1))


#总结,万能装饰器定式

def wrapper(f):  #装饰器函数,f是被装饰的函数
    def inner(*args,**kwargs):
        ‘‘‘在被装饰函数之前要做的操作‘‘‘
        ret=f(*args,**kwargs)
        ‘‘‘在被装饰函数之后要做的操作‘‘‘
        return ret
    return  inner

 

以上是关于python基础学习-装饰器基本原理的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

浅显易懂的谈一谈python中的装饰器!!

python使用上下文对代码片段进行计时,非装饰器

Python学习之三大名器-装饰器迭代器生成器

python零基础学习2-函数1-装饰器

1.16 Python基础知识 - 装饰器