在Python面试中被问到什么是装饰器时该如何巧妙的去回答面试官?

【专题】如何应对面试官的拷问—你了解python的装饰器吗? python之详解装饰器应用场景 ​ Python的装饰器(decorator)可以说是Python的一个神器,它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能。Python的装饰器同时也是Python学习从入门到精通过程中必需要熟练掌握的知识。今天尝试用浅显的语言解释下Python装饰器的工作原理及如何编写自己的装饰器吧。 应用场景 面试官:你了解装饰器吗? ... 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入


python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。
很多python初学者学到面向对象类和方法是一道大坎,那么python中的装饰器是你进入Python高级语法大门的一道坎。

计算函数运行时间

假设你写了几个函数,有一天领导心血来潮说,你把每个函数的运行时长(结束时间-开始时间)统计下,作为一个python实习生的你可能会这样写

原始函数

添加运行时长

作为一个实习生的你,可能想到的解决办法如下

 

 

运行结果:

 


上面的代码虽然满足了领导的要求,但是如果你写的函数很多的话,每个函数都这样去添加,会显得代码很臃肿,有很多重复代码。
有一天你边上的一个python老司机看了下你的代码,给你指了条明路:装饰器

函数装饰器

装饰器可以写成函数式装饰器,也可以写成一个类装饰器,先从简单的函数装饰器开始学习。
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。

runtime函数就是一个装饰器了,它对原函数做了包装并返回了另外一个函数,额外添加了一些功能。在函数上方使用@语法糖就可以调用这个装饰器了

 

 

运行结果

 

函数带参数装饰器

上面的runtime就是一个简单的装饰器模型了,但并不强壮,如果函数里面带有参数,那就不管用了,并且函数的参数是不固定的,这时候就需要用到args,*kwargs两兄弟了

 

类装饰器

关于call方法,不得不先提到一个概念,就是可调用对象(callable),我们平时自定义的函数、内置函数和类都属于可调用对象,
但凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable。
如果在类中实现了call方法,那么实例对象也将成为一个可调用对象

 

装饰器带参数

快到年底了,领导说运行的速度先不要太快了,让客户先加钱,然后再以正常的速度显示,那么现在的需求是让每个函数的运行时间加50%,该如何实现呢?
这就到了装饰器的高级语法,装饰器也需要带上参数了

函数装饰器

类装饰器

使用场景

用哪些地方需要使用装饰器呢?

  • 如果你用过locust,设置权重会用到@task(1),
  • 如果你用过pytest框架,使用fixture功能的时候经常会用到@pytest.fixture(scope="function")
  • allure里面可以添加测试步骤 @allure.step('修改购物车')
  • 被大量使用于Flask和Django web框架中,检查是否被授权去使用一个web应用的端点(endpoint)。如 @login_required
  • 也可以自己写个装饰器添加日志

前面一篇对python装饰器有了初步的了解了,但是还不够完美,领导看了后又提出了新的需求,希望运行的日志能显示出具体运行的哪个函数。

name和doc

__ name __用于获取函数的名称, __ doc __用于获取函数的docstring内容(函数的注释)

 

装饰器加函数名称日志

在装饰器里面添加2行代码,打印正在运行函数的名称和docstring内容

 

 

运行结果

 


从运行的结果可以看出,func_a.__ name __ 运行的结果是wrapper,func_a. __ doc__运行的结果是wrapper inner fuction。
也就是说被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),那这个问题如何解决呢?

这就需要用到functools里面的一个wraps函数了

functools

当func_a函数被装饰后,导致了一个副作用:自身的函数属性和docstring内容变成了wrapper函数的属性了。
这里需用到functools里面的一个wraps的装饰器来消除这样的副作用。

 

 

只需在wrapper函数上加上@wraps(func)即可解决

运行结果

 

类装饰器

带参数的装饰器,可以写成类装饰器

 

 

运行结果

 

平安科技Python面试题分析 Steven最近在考虑换工作,突然接到了平安的面试邀请,也没怎么特别的准备就跑过去面试了,结果聊了一个小时之后被无情刷掉,不过还是想把这次的一些考点放在这里供大家以后参考。btw:面试我的竟然是个妹子,刚开始进来的时候我还以为先是HR面,结果人家一开始问技术问题,肃然起敬。 先是问道: 1.Python里面的数据类型有哪些? 分析:其实这个问题并不难,除了基础的int/float/bool/... 阅读详情

相关推荐

学习使用turtlebot2——ROS上安装turtlebot2

安装环境:    安装Ubuntu 14.04版本和ROS Indigo    参考:http://wiki.ros.org/turtlebot/Tutorials安装步骤    有两种安装方法,一种直接的安装命令,另外一种源码编译安装,区别在于:直接安装命令是安装在电脑默认路径/opt/ros/indigo/share里面不便于更改代码,因为默认路径下文件一般有访问权限,无法直接更改,需要使用s...

weixin_42670641的博客 2531

Python学习之——装饰器

Python学习之——装饰器

selfsongs 2万+

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3236

python装饰器详解

python装饰器

weixin_44992737的博客 8万+

Versal ACAP NoC实战:像理解计算机网络一样配置AXI NoC,打通PS与PL数据通路

本文深入探讨了Versal ACAP NoC的配置与优化,通过计算机网络类比解析NoC架构,详细介绍了在VD100开发板上配置AXI NoC实现PS与PL数据交互的实战步骤。文章涵盖NoC组件功能、Vivado配置技巧、性能优化方法及常见问题解决方案,帮助开发者高效打通Versal芯片的数据通路。

weixin_42665255的博客 291

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

python-装饰器

Python 中的装饰器是一种语法糖,可以在运行时,动态的给函数或类添加功能。装饰器本质上是一个函数,使用@ + 函数名就是可实现绑定给函数的第二个功能。将一些通用的、特定函数的功能抽象成一个装饰器,可以重复利用这些功能“装饰”代指为被装饰对象添加新的功能,“器”代指器具/工具装饰器的作用:就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。插入日志、性能测试、事务处理、缓存、权限校验函数、方法、类函数装饰器分为:无参装饰器和有参装饰,二者都是使用都是需要【

王献运的博客 2万+

金蝶个版本下载地址,记得保存收藏。

专业版 V10.0 http://downloads.cmcloud.cn/kis/kis_pro/10.0/kiszybV10sp1.rar V11.0 http://downloads.cmcloud.cn/kis/kis_pro/11.0/KISV11Setup.rar V12.0 http://dow...

饺子的博客 2506

Python 装饰器

Python 装饰器(Decorator)是一种用于修改或扩展函数或方法行为的工具。它允许在不改变原函数代码的情况下,动态地添加功能。装饰器本质上是一个闭包函数,接受一个函数作为参数并返回一个新的函数。

大龄程序员 6033

YOLO26 实战全流程:从数据集标注到端到端无NMS推理(完整版,附ProgLoss核心调参技巧+避坑指南)

本章节是实战经验的精华❌ 数据集标注不规范,导致模型精度低 → ✅ 严格遵守工业级标注规范,标注框紧贴目标边缘,不要漏标/多标;❌ 训练时未使用预训练权重,导致收敛极慢 → ✅ 必须开启,预训练权重能让模型快速收敛;❌ ProgLoss参数调整幅度过大,导致训练崩溃 → ✅ 每次只调整一个参数,幅度±0.02即可,循序渐进;❌ 推理时强行添加NMS参数,画蛇添足 → ✅ YOLO26无需NMS,推理命令中不要加conf/iou参数,否则会降低推理速度;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1141

Python地理数据处理 十七:植被物候提取和分析(Savitzky-Golay)

植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重要的碳汇作用。因此,定量评估植被时空动态变化是制定生态系统可持续发展目标和衡量生态系统固碳潜力的重要前提,卫星遥感数据衍生的生态参量产品为研究长时间序列全球及区域植被时空变化提供了重要数据源。SG滤波能够对物候信息进行平滑,并提取其中的物候信息

amyniez的博客,欢迎交流讨论 4247

Python的装饰器

本篇文章介绍了python的装饰器是如何实现的,还有大家都经常听到的语法糖的讲解

m0_72154565的博客 8584

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

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

如果我们需要编写的装饰器本身是带参数的,我们需要编写三层的嵌套函数,其中最外一层用来传递装饰器的参数。如果上例中外函数的变量x换成被装饰函数对象(func),内函数的变量y换成被装饰函数的参数,我们就可以得到一个通用的装饰器啦(如下所示)。我们在没对func本身做任何修改的情况下,添加了其它功能, 从而实现了对函数的装饰。面试官往往会给你提一些简单的需求,如返回被装饰函数执行时间,函数的名称等,这时候要学会灵活的转变。如果你非常的熟悉上面的这些内容,你就可以轻松的写一个通用的装饰器。我换种写法你思考一下。

m0_60707660的博客 689

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

求职时这样回答问题你就输了!来自IT类面试官视角的深度解读

摘要:在IT工程师准备写简历时,经常会遇到这些令人头疼的问题:应届生没有实践经验;不确定哪些信息该写不该写;不知道如何在简历上展现自己的优势;不知道如何编写项目经验一栏;为了高大上写上了自己不熟悉的技术名词……本文将从面试完整流程、简历书写与优化、面试问答到最终选定offer的全过程,展开360°全方位详细的指导说明,希望对求职路上困惑迷茫着的小伙伴们有所裨益。 目录 1.面试完整流程一览 2.如何翻倍自己的面试机会 3.如何编写或优化自己的简历 4.如何为自己的面试做准备 5.我与面试官的正面

华为云官方博客 4544

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

282道Python面试八股文(答案、分析和深入提问)整理

模块是一个简单的Python文件,包含函数、类和变量。包是一个文件夹,包含多个模块,并且需要一个文件来被识别。使用模块和包可以使代码更具可维护性、可重用性和可读性。不同类型的验证码可能需要不同的解决方案,有时需要结合多种方法。重要的是遵循网站的服务条款,合理、合法地进行数据爬取。在Scrapy中,你可以在文件中定义多个Pipeline类。每个类负责处理特定的逻辑,比如数据清洗、数据验证、持久化存储等。通过Item Pipeline,Scrapy允许你在数据提取后以模块化和可扩展的方式进行数据处理。

ocean2103的专栏 4万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

面试官说:不懂Python装饰器的人直接Pass!!

特别是在需求频繁变更、迭代周期短的互联网行业,装饰器的复用性和简洁性使其成为代码优化的利器。通过学习装饰器,开发者能够更深入地理解Python的核心特性,进而编写出更高效、易维护的代码。”在Python世界里,掌握装饰器不仅能帮助你写出更优雅的代码,更能让你在面试中脱颖而出!装饰器是一个用于包装其他函数的函数,能够在不改变原函数代码的前提下,扩展其功能。Python中的装饰器,本质上就是一个高阶函数,这里高阶函数指定就是"一个返回值是函数的函数"装饰器可以在不修改函数的情况下,增加额外的功能。

朱雀随云记的博客 572

面试遇到的奇葩面试官

毕业至今十多年,经历过的大大小小的面试也不算少,见过的面试官大多都挺靠谱的,但也有极个别不靠谱的,至今印象深刻。靠谱的面试官基本都差不多,但不靠谱的,却各有各的奇葩。今天...

Python与数据分析 460

面试官说了,不懂Python装饰器的人直接Pass

Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Python,那么大概率会被问到那么我们应该怎么回答这个问题呢?这里我从几个角度来解释装饰器的作用,大家可以挑选符合自己的说法

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 174

面试官:不懂Python装饰器的人直接pass!

Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Python,那么大概率会被问到那么我们应该怎么回答这个问题呢?这里我从几个角度来解释装饰器的作用,大家可以挑选符合自己的说法

伤心的辣条 470

面试官:不懂Python装饰器的人直接拒绝 我:这..

Python的装饰器是面试常被问到的问题之一,如果你的简历里描述会Python,那么大概率会被问到那么我们应该怎么回答这个问题呢?这里我从几个角度来解释装饰器的作用,大家可以挑选符合自己的说法 ......

自动化测试技术栈 436
上一篇: 零基础学Python:函数
下一篇: 用Python简单实现模拟太阳系运转
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值