码迷,mamicode.com
首页 > 编程语言 > 详细

python-装饰器的最终形态和固定格式 语法糖

时间:2018-10-02 20:37:58      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:语法糖   元素   style   art   pre   表示   赋值   装饰器   方式   


import time
def timer(f):   #  这是一个装饰器函数
    def inner():
        start = time.time()
        f()     # 被装饰的函数
        end = time.time()
        print(函数执行了%d秒 %(end-start) )
    return inner
@timer      # 语法糖  @装饰器函数名
def func(): # 被装饰的函数
    time.sleep(3)
    print(这是一个函数执行的内容)
func() 

 

装饰带参数函数的装饰器

import time
def timer(f):   #  这是一个装饰器函数
    def inner(*args,**kwargs):
        start = time.time()
        ret = f(*args,**kwargs)     # *args,表示打散元组中每个元素传递
        end = time.time()
        print(函数执行了%s秒 %(end-start) )
        return ret
    return inner
# 两个参数传递,按位置传递参数方式 *args就可以解决
@timer      # 语法糖  @装饰器函数名
def func(a,b): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a,b)
    return 新年好

# 一个位置参数,*args就能传递
@timer      # 语法糖  @装饰器函数名
def func1(a): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a)
    return 新年好

# 如果赋值传递则需要**kwargs来解决
@timer      # 语法糖  @装饰器函数名
def func2(a,b=2): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a,b)
    return 新年好

ret = func(1,2)
ret1 = func1(1)
ret2 = func2(1)
print(ret,ret1,ret2) 

 

装饰器的固定格式

def wrapper(f):   #  这是一个装饰器函数
    def inner(*args,**kwargs):
        ret = f(*args,**kwargs)     # *args,**kwargs表示打散元组中每个元素传递
        return ret
    return inner
@wrapper
def func(a,b): # 被装饰的函数,可以传递参数
    print(这是函数主体,a,b)

ret = func(1,2) # 这里执行的是inner

 

 

 

技术分享图片

 

python-装饰器的最终形态和固定格式 语法糖

标签:语法糖   元素   style   art   pre   表示   赋值   装饰器   方式   

原文地址:https://www.cnblogs.com/alet/p/9737508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!