python 装饰器

1. 无参装饰器(无函数返回值)

import time  
def timer(func):  
    ''' prints function time '''  
    def wrapper():  
        start = time.time()  
        func()  
        print('function %s run time %s' % (func.__name__, time.time() - start))  
    return wrapper  
@timer  
def f1():  
    time.sleep(1)  # 通过“睡”一会儿,模拟函数执行的时间  
@timer  
def f2():  
    time.sleep(2)  
f1()  # function f1 run time 1.0000762939453125  
f2()  # function f2 run time 2.000044345855713  

2. 有参装饰器(无函数返回值)

import time  
def timer(func):  
    def wrapper(*args, **kwargs):  
        start = time.time()  
        func(*args, **kwargs)  
        print('function %s run time %s' % (func.__name__, time.time() - start))  
    return wrapper  
@timer  
def public():  
    time.sleep(0.1)  
    print('oldboy public index page')  
@timer  
def admin(name):  
    time.sleep(0.1)  
    print('oldboy public admin page')         # 老男孩后台页面  
    if name == 'root':                      # 只有用户名是root的用户才能访问  
        return 'welcome vip page'  
    return 'name error'                     # 否则提示请用户名错误  
public()  
admin('oldboy')  
"""
# 上面两个函数执行结果  
oldboy public index page                    # public函数执行的结果  
function public run time 0.10057306289672852  
oldboy public admin page                    # 成功进入了admin页面  
function admin run time 0.10007095336914062  
"""

3. 有参数,有函数返回值

import time  
def timer(func):  
    def wrapper(*args, **kwargs):  
        start = time.time()  
        ret = func(*args, **kwargs)  
        print('function %s run time %s' % (func.__name__, time.time() - start))  
        return ret  #被执行函数的函数返回值
    return wrapper  
@timer  
def public():  
    time.sleep(0.1)  
    print('oldboy public index page')  
@timer  
def admin(name):  
    time.sleep(0.1)  
    print('oldboy public admin page')  # 老男孩后台页面  
    if name == 'root':  # 只有用户名是root的用户才能访问  
        return 'welcome vip page'  
    return 'name error'  # 否则提示请用户名错误  
public_ret = public()  
admin_ret = admin('root')  
print('public return:', public_ret)  # public return: None  
print('admin return:', admin_ret)  # admin return: welcome vip page 

 

posted @ 2021-12-29 00:51  我不知道取什么名字好  阅读(37)  评论(0)    收藏  举报