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

Python中的装饰器,本质上就是一个高阶 函数 ,这里高阶函数指定就是" 一个返回值是函数的函数 "在python中使用装饰器,有两个组成部分.①@符号调用装饰器 ②定义被装饰的方法 范例如下:装饰器名字 定义被装饰的函数 logger def func(): pass 装饰器可以在不修改函数的情况下,增加额外的功能.这...
不学会装饰器,面试不敢说自己会Python
本文章出自【 码同学软件测试 】
码同学公众号:自动化软件测试
码同学抖音号: 小码哥聊软件测试
装饰器
Python的装饰器 是面试常被问到的问题之一,如果你的简历里描述 会Python .那么大概率会被问到.
那么我们应该怎么回答这个问题呢?
这里我从几个角度来解释装饰器的作用,大家可以挑选符合自己的说法

Python中的装饰器,本质上就是一个高阶 函数 ,这里高阶函数指定就是" 一个返回值是函数的函数 "

在python中使用装饰器,有两个组成部分.
①@符号调用装饰器
②定义被装饰的方法
范例如下:
@装饰器名字
定义被装饰的函数
@logger def func(): pass

装饰器可以在不修改函数的情况下,增加额外的功能.这是官方给 装饰器 的定义
实际上我们会把一些业务功能之外的,附属需求用装饰器来实现.比如:为我们的函数添加 日志记录 , 性能监控器 , 埋点计数器 .大家也都知道,修改写好的函数是非常麻烦并且容易出错的一件事.所以很适合" 在不修改函数内部代码的前提下,为它包装一些额外的功能 "也就是装饰器

staticmethod 用来修饰类中的方法,使得该方法可以直接用类名访问,如cls.foo()。
classmethod 和staticmehod类似,区别在于staticmethod,classmethod会将class传入被修饰的方法中
class A(object): a = 1 def __init__ ( self ): self .a = 2 @staticmethod def foo1(): print A.a @classmethod def foo2(cls): print "class a is" , cls.a print "instance a is" , cls().a
免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以 转发文章 + 私信「码同学666」获取资料哦
property 可以将属性的访问和赋值用函数来实现,从而可以在函数里添加参数检查等一些功能,同时外部使用时访问和赋值的方式并不发生变化。注意访问和赋值的方法名是一样的
class A(object): def __init__( self ): self .__count = 0 @property def count( self ): return self .__count @count .setter def count( self , value): if not isinstance(value, int): raise ValueError ( 'count must be an integer!' ) self .__count = value a = A() print a.count a.count = 1 print a.count a.count = "a" # raise ValueError
functools.wraps 用在装饰器的代码里。可以把原始函数的 name 等属性复制到wrapper()函数中,这样就可以获取到真实函数的 name 属性,而不是wrapper
import functools def log(text): def decorator(func): @functools.wraps (func) def wrapper( * args, ** kw): print '%s %s():' % (text, func. __name__ ) return func( * args, ** kw) return wrapper return decorator

#!/anaconda3/envs/FEALPy/bin python3.7 # -*- coding: utf-8 -*- # --- # @File: 装饰器语法.py # @Author: Bull # --- # 定义装饰器函数 # 1.简单装饰器范例 def logger(func):#在python里,一切都是对象 def wrapper(*args,**kw): print("进入装饰器函数了") func(*args,**kw)#真正的函数在装饰器重新调用 func(*args, **kw) print("装饰器功能执行完毕") return wrapper @logger#=logger(add) def add(x,y): print('进入被修饰的函数') print(f'{x}+{y}={x+y}') # add(1,2) # 2.带参数的装饰器 def say_hello(contry): def wrapper(func): def second(*args,**kw): if contry == 'china': print("来自装饰器的‘你好’") elif contry == 'america': print('来自装饰器的"hello"') else: return func(*args,**kw) return second return wrapper @say_hello('america') def american(): print("I am from America") @say_hello('china') def china(): print('我来自中国') american() print('*'*30) china()
END
本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
2022-07-18
mengvlog 阅读 10 次 更新于 2025-06-20 00:19:15 我来答关注问题0
  • 装饰器可以在不修改函数的情况下,增加额外的功能.这是官方给 装饰器 的定义 实际上我们会把一些业务功能之外的,附属需求用装饰器来实现.比如:为我们的函数添加 日志记录 , 性能监控器 , 埋点计数器 .大家也都知道,修改写好的函数是非常麻烦并且容易出错的一件事.所以很适合" 在不修改函数内部代码的...

  •  翡希信息咨询 我很内向19岁,是女生,没有读书了感觉自己一无是处,自卑又有玻璃心,面试都不敢去?

    大胆面对未来:未来是充满可能的。不要因为过去的经历或者现在的状态就否定未来的可能性。勇敢地迈出第一步,你会发现,其实并没有那么难。面试是一个展示自己、了解机会的过程,而不是一个评判你全部价值的场合。总结:要相信自己,克服自卑和玻璃心,勇敢地面对未来。文凭不是唯一标准,你的能力和态度...

  •  你叔叔的二爸 事业单位面试难不难

    不难。事业单位面试的难点主要在于以下,只要能克服难点,就可以得到比较好的结果:1.“不敢说”事业单位面试难点之一是不敢说,严肃的面试环境会令很多考生不敢开口,无法思考,而不敢说话。2.“不会说”事业单位面试题型比较多,思考时间比较短,可能抽取到的试题不熟悉题型、思维模式,无法理解到题目...

  •  百度网友fb9f3e7 如何锻炼自己 能说会说敢说,脸皮厚,敢做,不要脸的境界

    1,不敢说的原因是你不知道你说出来之后别人会有怎么样的反应,你害怕遭到拒绝或是冷淡。记住两个字:主动!去练习和身边的每一个人打招呼,包括邻居,同事,同学,认识的,不认识的,只要你的态度是对的,别人没有理由拒绝你的热情,即使有个别例外的,也是他们的原因,不用去理会。2,不能说不会...

  •  冷言旁观看社会 面试经常被刷,求职者有哪些心态,肯定过不了?

    一个求职者如果有了自卑心态,他就会觉得自己一无是处,不管哪里都不如人家,如果他抱着这样的心态去面试,从一开始就是不相信自己能够面试成功,如果说连自己都不相信自己,那么在这个世界上还有谁会相信你呢?而抱着自卑心态的人一般都不善于,也可以说不敢和别人交谈,不喜欢和他人相处,因此他们学...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部