专题10 如何应对面试官的拷问—你了解python的装饰器吗?_python的装饰器面试如何回答

本文详细介绍了Python装饰器的原理和应用,包括装饰器在添加功能、数据清理、验证等方面的用途,以及如何编写简单的、带参数的装饰器。重点讨论了装饰器的嵌套函数和闭包实现,同时给出了面试中常见的装饰器题目,如统计函数执行时间、保持__name__属性等,并展示了如何处理多个装饰器的使用情况。
摘要由CSDN通过智能技术生成

​Python的装饰器(decorator)可以说是Python的一个神器,它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能。Python的装饰器同时也是Python学习从入门到精通过程中必需要熟练掌握的知识。今天尝试用浅显的语言解释下Python装饰器的工作原理及如何编写自己的装饰器吧。

应用场景
  • 附加功能
  • 数据的清理或添加:
    • 函数参数类型验证 @require_ints 类似请求前拦截
    • 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改
    • 为函数提供额外的数据 mock.patch
  • 函数注册
    • 在任务中心注册一个任务
    • 注册一个带信号处理器的函数

你可能还是不理解装饰器是啥?没有关系,下面我们详细的解析一下到底如何去实现装饰器。

简单的装饰器
import time
def getTime(func):
    def inner():
        start = time.time()
        func()
        end = time.time()
        print('用时:{}秒'.format(end-start))
    return inner

@getTime
def func1():
    time.sleep(2)
    print("Func1 is running.")

if __name__ == '\_\_main\_\_':
    func1()

上面的代码,func1函数被getTime函数装饰,这个装饰器实现的功能是统计func1函数执行的时间,这其实就是一个最简单的装饰器。
如何你还是不太理解,我们换种写法

import time
def getTime(func):
    def inner():
        start = time.time()
        func()
        end = time.time()
        print('用时:{}秒'.format(end-start))
    return inner
def func1():
    time.sleep(2)
    print("Func1 is running.")
res = getTime(func1)
print(res)

本质上的装饰器

Python的装饰器本质上是一个嵌套函数,它接受被装饰的函数(func)作为参数,并返回一个包装过的函数。这样我们可以在不改变被装饰函数的代码的情况下给被装饰函数或程序添加新的功能。

Python的装饰器广泛应用于引入日志,执行函数前预备处理,执行函数后清理功能,权限校验(如django中的@login_required和@permission_required装饰器)ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值