美文网首页
你需要知道的面试高频题-python装饰器

你需要知道的面试高频题-python装饰器

作者: 吱吱菌啦啦 | 来源:发表于2022-04-15 08:46 被阅读0次
面试高频题

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

考点分析
  • 是否使用过Python的一些内置装饰器,或者第三方封装的装饰器。
  • 是否了解装饰器的使用场景,是否有自己封装装饰器并使用。
总结
  • 本质是封装了一个闭包函数,在函数、方法或者类的定义上方添加 @装饰器名称 进行使用。
  • 优化代码的可读性,可维护性
装饰器:在函数体开始执行与结束执行时分别添加打印信息。

装饰器的执行步骤如下:

def zz():
    print("测试1")

def cc():
    print("测试2")

# 封装'开始执行-某个方法-结束执行'
def fun_tips(func):
    print("开始执行")
    # 不再写死任何一个函数,传入任意外部函数对象
    func()
    print("结束执行")

# 传入函数对象'某个方法'
fun_tips(cc)

# 这段代码打印结果是:
开始执行
测试2
结束执行
添加一个装饰器的步骤
  • 第一步,定义两个函数,一个内函数,一个外函数;外函数有一个形参,接收被装饰的函数对象;
  • 第二步,在内函数中添加装饰器逻辑;
  • 第三步,把内函数的函数对象return出去,这里return要注意在外函数那层,return值的格式为内函数对象;
  • 第四步,装饰器的使用,@外函数名;
  • 第五步,在装饰器执行过程中,会自动传入一个参数,参数就是被装饰函数的函数对象;
  • 第六步,添加被装饰函数的执行步骤;
def timer(func):
    def inner():
        # 内函数,执行装饰器逻辑
        print("开始执行")
        func() # 添加被装饰函数的执行步骤
        print("结束执行")
    return inner

# 装饰器的使用@+外函数名
@timer
def zz():
    print("测试1")
练习:写一个计时器,计算函数的执行时间
import datetime
def timer(func):
    def inner():
        """
        装饰器逻辑的实现
        :return:
        """
        start_time = datetime.datetime.now()
        func()
        end_time = datetime.datetime.now()
        print(f"函数的执行时间为{end_time-start_time}")
    return inner

@timer
def module():
    print("模块")
module()

打印结果为:
模块
函数的执行时间为0:00:00.000330

基于上面的计时器,存在两个问题

Q1:被装饰的函数如果存在传参,如何处理?
A1:在内函数加形参,在函数调用的地方添加参数信息

Q2:如果被装饰的函数需要写死参数,但是不确定参数数量
A2:把内函数形参和函数调用的地方形参换成不定长参数即可

import datetime
def timer(func):
    def inner(*args, **kwargs):
        """
        装饰器逻辑的实现
        :return:
        """
        start_time = datetime.datetime.now()
        func(*args, **kwargs)
        end_time = datetime.datetime.now()
        print(f"函数的执行时间为{end_time-start_time}")
    return inner

@timer
def module1(name):
    print(f"模块{name}")

@timer
def module2(name, age, gender):
    print(f"模块2{name, age, gender}")

module1("zz")
print("==================")
module2("cc", "男", "10岁")
print("==================")
module2("jj", "女", "1岁")
print("==================")

打印结果如下:
模块zz
函数的执行时间为0:00:00.000064
==================
模块2('cc', '男', '10岁')
函数的执行时间为0:00:00.000016
==================
模块2('jj', '女', '1岁')
函数的执行时间为0:00:00.000008
==================

面试高频题

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

考点分析
  • 是否使用过Python的一些内置装饰器,或者第三方封装的装饰器。
  • 是否了解装饰器的使用场景,是否有自己封装装饰器并使用。
总结
  • 本质是封装了一个闭包函数,在函数、方法或者类的定义上方添加 @装饰器名称 进行使用。
  • 优化代码的可读性,可维护性

相关文章

  • 你需要知道的面试高频题-python装饰器

    面试高频题 面试官通常会问: 1. python 装饰器的作用是什么? 2. 装饰器的原理与实现? 考点分析 是否...

  • 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更...

  • 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性,熟练掌握装饰器会让你的编程思路更加...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • [Python] 装饰器(一)

    1. 装饰器是什么?装饰器(Decorator )作为python语言面试的必免考点!如果没有回答上来,在面试官心...

  • 不学会装饰器,面试不敢说自己会Python

    本文章出自【码同学软件测试】 装饰器 Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Pytho...

  • TypeScript: 类的装饰器(三)

    带参数的类的装饰器 学习 python 的同学应该知道,python 中也有装饰器,而且 python 中的众多框...

  • python

    Python装饰器为什么难理解? 无论项目中还是面试都离不开装饰器话题,装饰器的强大在于它能够在不修改原有业务逻辑...

  • Python 高级编程 装饰器

    1.1装饰器 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中...

  • Python装饰器

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你...

网友评论

      本文标题:你需要知道的面试高频题-python装饰器

      本文链接:https://www.haomeiwen.com/subject/jlfxertx.html