写点什么

经典面试题 -Python 装饰器

  • 2022 年 9 月 19 日
    北京
  • 本文字数:1055 字

    阅读完需:约 3 分钟

经典面试题-Python 装饰器

霍格沃兹测试学社 ceshiren.com

面试问题

面试官通常会问: 1. python 装饰器的作用是什么? 2. 装饰器的原理与实现?

面试考察点分析

  1. 是否使用过 Python 的一些内置装饰器,或者第三方封装的装饰器。

  2. 是否了解装饰器的使用场景,是否有自己封装装饰器并使用。

技术点分析

装饰器涉及到的技术点主要有:

  • 闭包函数

  • 装饰器的封装方法

闭包函数

函数引用

  • 函数可以被引用

  • 函数可以被赋值给一个变量

def hogwarts():    print("hogwarts")harry = hogwartsharry()
复制代码

闭包函数

  • 闭包的内部函数中,对外部作用域的变量进行引用

  • 闭包无法修改外部函数的局部变量

  • 闭包可以保存当前的运行环境

def output_student(grade):    def inner(name, gender):        print(f"霍格沃兹测试学社开学啦!\n        学生的名称是{name},性别是{gender},        年级是{grade}")    return innerstudent = output_student(1)student("罗恩", "男")student("哈利", "男")student("赫敏", "女")
复制代码

为什么要学习装饰器

  • 行业需求: 涉及 Python 技术栈,面试常见题

  • 使用需求: 优化代码的可读性,可维护性

装饰器示例

  • 函数体开始执行与结束执行的时候分别添加打印信息

# 不使用装饰器的代码def timer(func):    print("计时开始")    func()    print("计时结束")def hogwarts():    print("霍格沃兹测试学院")timer(hogwarts)
复制代码

装饰器

# 使用装饰器的代码def timer(func):    def inner():        print("计时开始")        func()        print("计时结束")    return inner@timerdef hogwarts():    print("霍格沃兹测试学院")hogwarts()
复制代码

装饰器练习

  • 实现一个计时器的装饰器,计算函数执行时间

装饰带参数函数

import datetimedef timer(func):    def inner(*args, **kwargs):        # 获取当前时间        start_time = datetime.datetime.now()        func(*args, **kwargs)        end_time = datetime.datetime.now()        print(f"函数的执行时间{end_time-start_time}")    return inner@timerdef hogwarts(name):    print("霍格沃兹测试学社", name)
复制代码

面试题答案总结

面试官通常会问: 1. python 装饰器是什么?其作用是什么? 2. 装饰器的原理与实现?

  • 本质就是封装了一个闭包函数,在函数、方法或者类的定义上方添加@装饰器名称进行使用。

  • 优化代码的可读性,可维护性:

点击下方链接免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/22265

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019.10.23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
经典面试题-Python装饰器_霍格沃兹测试开发学社_InfoQ写作社区