装饰器

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 装饰器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


1.定义

在不改变被装饰对象内部代码和调用方式的基础上,从而实现新添功能的工具

2.原则

开放封闭原则
即,对扩展开放/对修改封闭

3.简易版装饰器

给函数添加统计执行时间的功能

# 版本演绎1.0版本

import time  # 导入时间模块
# 定义一个被装饰的函数对象
def index():
    start_time = time.sleep(2)
    print('from index >>>')
# 定义一个实现实现计时功能的函数
def get_time():
    start_time = time.time()
    index()
    end_time = time.time()
    print('函数运行时间:%s' % (end_time-start_time))
get_time()

image

# 版本演绎2.0版本
# 给函数添加统计执行时间的功能
import time  # 导入时间模块

# 定义一个被装饰的函数对象
def index():
    start_time = time.sleep(2)
    print('from index >>>')

# 闭包函数,目的是将get_time这个函数名传给index
def outer(func):
    # 定义一个实现实现计时功能的函数
    # func = index
    def get_time():
        start_time = time.time()
        func()
        end_time = time.time()
        print('函数运行时间:%s' % (end_time-start_time))
    return get_time  # 别忘了
index = outer(index)  # 这一步是将index函数名传值到outer函数中,最后返还get_time函数名,再复制给假的index变量名
index()

image

4.装饰器(解决函数传值问题)

# 版本演绎3.0版本
# 给函数添加统计执行时间的功能
import time  # 导入时间模块

# 定义一个被装饰的函数对象
def index():
    time.sleep(2)
    print('from index >>>')
def login(name):
    time.sleep(1)
    print('%s from login >>>' % name)
# 闭包函数
def outer(func):
    # 定义一个实现实现计时功能的函数
    # func = login
    def get_time(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        print('函数运行时间:%s' % (end_time-start_time))
    return get_time
login = outer(login)
login('alan')

image

5.装饰器(解决返回值问题)

# 给函数添加统计执行时间的功能
import time  # 导入时间模块

# 定义一个被装饰的函数对象
def index():
    time.sleep(2)
    print('from index >>>')
def login(name):
    time.sleep(1)
    # print('%s from login >>>' % name)
    return 0
print(login('alan'))
# 闭包函数
def outer(func):
    # 定义一个实现实现计时功能的函数
    # func = login
    def get_time(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        # print('函数运行时间:%s' % (end_time-start_time))
    return get_time
login = outer(login)
login('alan')
print(login('alan'))

image

改进

6.装饰器模板

7.使用装饰器实现认证功能

8.装饰器语法糖

9.双层装饰器

10.装饰器修复技术

11.有参装饰器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/144032.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!