装饰器的使用

1.Python中,一切皆对象,一个函数也可当做一个对象传递,
2.装饰器就是接受一个函数作为参数,添加功能后返回一个新函数的函数或类。
3.python 中使用 @ 来使用装饰器。
4.@ 只是装饰器的语法糖,语法糖(Syntactic sugar),也译为糖衣语法,是一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

使用装饰器写一个延时函数(装饰器功能:计算函数运行时间)

# _*_ coding:utf-8 _*_

import time


def log_time(func):     # 接受一个函数作为参数
    def _log(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        print('use time:{}'.format(time.time() - start_time))
        return res
    return _log


@log_time       # 使用装饰器
def my_sleep():
    time.sleep(2)

my_sleep()

""" @log_time 等价于:
    log_time(my_sleep())
"""

使用类写一个带参数的装饰器

class MyLog(object):
    def __init__(self, on_off='on'):    # 定义默认参数
        self.on_off = on_off

    def __call__(self, func):
        def _log(*args, **kwargs):
            if self.on_off == 'on':
                start = time.time()
                res = func(*args, **kwargs)
                end = time.time()
                print('|运行时长:{:.4f}'.format(end - start))
                return res
            elif self.on_off == 'off':
                pass
            else:
                print('log:on_off传参不对')

        return _log

 # 测试装饰器
class Test(): 
    @MyLog()
    def test(self):
        time.sleep(1)

Test().test()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容