2025/12/31 19:50:18
网站建设
项目流程
分享类网站怎么做,Wordpress页面无侧边栏,国外网站免费dns,网站开发建设技术规范书01 装饰器
Python的装饰器是面试常被问到的问题之一#xff0c;如果你的简历里描述会Python#xff0c;那么大概率会被问到那么我们应该怎么回答这个问题呢#xff1f;这里我从几个角度来解释装饰器的作用#xff0c;大家可以挑选符合自己的说法
1.python装饰器原理基础 …01 装饰器Python的装饰器是面试常被问到的问题之一如果你的简历里描述会Python那么大概率会被问到那么我们应该怎么回答这个问题呢这里我从几个角度来解释装饰器的作用大家可以挑选符合自己的说法1.python装饰器原理基础Python中的装饰器本质上就是一个高阶函数这里高阶函数指定就是一个返回值是函数的函数2.装饰器的语法在python中使用装饰器有两个组成部分符号调用装饰器定义被装饰的方法范例如下装饰器名字 定义被装饰的函数 logger def func(): pass3.一般用来做什么?装饰器可以在不修改函数的情况下增加额外的功能。这是官方给装饰器的定义实际上我们会把一些业务功能之外的附属需求用装饰器来实现。比如为我们的函数添加日志记录性能监控器埋点计数器。大家也都知道修改写好的函数是非常麻烦并且容易出错的一件事。所以很适合“在不修改函数内部代码的前提下为它包装一些额外的功能”也就是装饰器4.常用的装饰器staticmethod 用来修饰类中的方法使得该方法可以直接用类名访问如cls.foo()。classmethod 和staticmehod类似区别在于staticmethodclassmethod会将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().aproperty 可以将属性的访问和赋值用函数来实现从而可以在函数里添加参数检查等一些功能同时外部使用时访问和赋值的方式并不发生变化。注意访问和赋值的方法名是一样的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 ValueErrorfunctools.wraps 用在装饰器的代码里。可以把原始函数的name等属性复制到wrapper()函数中这样就可以获取到真实函数的name属性而不是wrapperimport 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 5.怎么手写一个装饰器 #!/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}{xy}) # 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()感谢每一个认真阅读我文章的人作为一位过来人也是希望大家少走一些弯路如果你不想再体验一次学习时找不到资料没人解答问题坚持几天便放弃的感受的话在这里我给大家分享一些自动化测试的学习资源希望能给你前进的路上带来帮助。软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。