首页 > 其他分享 >【重点】【装饰器看这篇一】装饰器的原理【杭州多测师】【多测师_王sir】

【重点】【装饰器看这篇一】装饰器的原理【杭州多测师】【多测师_王sir】

时间:2024-01-18 11:55:19浏览次数:22  
标签:sir return 函数 func print 多测师 装饰 def

 

装饰器原理:自己写一个装饰器相当于函数里面还有一个函数,然后内部函数返回的是函数的调用,给到外部函数,使用装饰器的函数,会把整个函数当做是装饰器的入参传入到装饰器里面去进行处理,只要你被装饰、那么就相当于这个被装饰的函数的函数名=装饰器(被装饰的函数名)
装饰器的作用:在不改变原有函数功能的基础之上、给函数增加新的功能
装饰器原理其他解释:【重点】【装饰器看这篇二】装饰器和ddt装饰器在ui自动化中的应用【杭州多测师】【多测师_王sir】

#第一种情况:装饰器return
def modify(func):
    def injob():
        print('正在进行扩展功能')
        return func()
    return injob

@modify
def func():
    print('func 正在执行')
    return "result"

print(func())
# 正在进行扩展功能
# func 正在执行
# result

#第二种情况:装饰器不return
def modify(func):
    def injob():
        print('正在进行扩展功能')
        func()
    return injob

@modify
def func():
    print('func 正在执行')
    return "result"

print(func())
# 正在进行扩展功能
# func 正在执行
# None


#第三种情况:没有装饰器不
def modify(func):
    def injob():
        print('正在进行扩展功能')
        func()
    return injob

def func():
    print('func 正在执行')
    return "result"

print(func())
# func 正在执行
# result

 

上面三段代码分别是未经过装饰器扩展时目标函数的执行结果,然后是加了装饰器,但是没有返回函数结果和返回了函数结果的三种情况。
我们知道,装饰器的作用就是给目标函数扩展功能,基本原则是不能影响原函数的功能,所以不加return的话,原函数的基本功能都受到影响了,必须对原函数的返回值进行再次return。

现在我们来说结论,函数名是指代的函数代码所在的空间,函数名加括号,指代的是函数往外传递的数据,而return就是往外传递数据的工具,如果函数名()没有接收到return出来的数据,那么“函数名()”除了执行命令外,什么也不是,函数往外传递的数据就丢失了。

装饰器的核心在于闭包的内层函数,外层函数将目标函数拿来加工,用内层函数包裹目标函数的代码,然后将这一整块代码返回给目标函数的函数名,现在目标函数的函数名(代号func)指向的是加工过的函数代码,原来的代码成了外来户,所以原来代码传递的数据如果没有中间人进行传递的话,func将不能接收那个数据,那个数据就丢失了。func()原来可以容放原函数返回值,现在就什么都没有了。所以,return是很有必要的。

 

标签:sir,return,函数,func,print,多测师,装饰,def
From: https://www.cnblogs.com/xiaoshubass/p/17972213

相关文章

  • Java动态代理、AOP和装饰器模式
    面向切面编程AOP-AspectOrientedPrograming,主要用于处理核心业务逻辑外的一些东西,比如日志和缓存。这个“切面”可以理解为在代码的某个地方切一刀,在其中加一些东西。装饰器以日志为例,如果没有使用AOP,那么可以使用装饰来实现类似的代码。我们使用装饰器模式来实现一下在执行......
  • 46重试装饰器retry
     fromretryingimportretryr'''安装:pipinstallretryingVersion:1.3.4作用:retrying库是Python中用于实现重试机制的库,它们的目的都是在遇到错误或异常时自动重试代码块,以增加代码的健壮性和可靠性.下面的案例抽几个常用参数说明retry装饰器,当然也可以自己编写代码......
  • Python一些提高效率的类库和装饰器用法
    本文主要是慢慢积累Python中一些能提高效率的类库和装饰器,闲话少说,开始进入主题。一、重试【问题引申:接口网络抖动不稳如何做?回答:请求接口捕获异常和接口请求重试】1fromretryingimportretry2#等待1秒后重试,最大重试次数为33@retry(stop_max_attempt_number=3,wait_......
  • 装饰者模式
    增强原有对象,而不改变原有对象定义:在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象功能)类型:结构型适用场景:扩展一个类的功能或给一个类添加附加职责动态的给一个对象添加功能,这些功能可以再动态的撤销优点:继承的......
  • Python教程(24)——全方位解析Python中的装饰器
    Python装饰器是一种特殊的函数,它接收一个函数作为参数,然后返回一个新的函数,用于扩展或修改原始函数的行为。装饰器提供了一种便捷的方式来在不修改被装饰函数源代码的情况下,增加、修改或包装函数的功能。通俗点说就是尽量不修改原有功能代码的情况下,给原有的功能添加新的功能。装......
  • 装饰器
    【一】什么是装饰器器:工具装饰:为其他事物添加额外的功能定义一个函数,这个函数的功能就是用来装饰其他函数的也就是说这个函数就是用来给其他函数添加额外功能用的提示:可调用对象有函数,方法或者类,此处我们单以本章主题函数为例,来介绍函数装饰器,并且被装饰的对象也是函数。......
  • typescript实现一个最简的装饰器依赖注入
    装饰器依赖注入,元数据键是关键因此必须开启ts装饰器和ts元数据tsconfig.json"experimentalDecorators":true,//开启装饰器"emitDecoratorMetadata":true,//开启元数据并且安装reflect-metadata支持元数据编程全局入口倒入一次即可import"reflect-metadata";类型元数据:......
  • 【Python基础】函数进阶(匿名函数、装饰器、闭包等)
    简介函数进阶的使用,包括匿名函数、装饰器、闭包等匿名函数指函数是没有函数名称的,临时使用的微函数。使用lambda表达式来声明,语法格式如下:lambda[arg1[arg2,...,argn]]:表达式*[arg1,arg2,...,argn]为函数的参数列表,可有可无。*表达式:表示函数体,必须......
  • 闭包与装饰器
    闭包,又称闭包函数或者闭合函数,闭包函数就是指在一个嵌套函数里的内层函数,然后用内层函数来操纵外层函数的数据1.闭包函数点击查看代码defout_fun():#外层函数defin_fun():#内层函数print(10)returnin_fun#外层函数返回值,返回的是内层函数本......
  • C++设计模式05 —— 装饰模式
    装饰模式过度的使用继承使得派生的子类过多,代码重复度很高,复用性变差。实现加密文件流、加密网络流、加密内存流、缓冲文件流、缓冲网络流、缓冲内存流。如果我们创建一个流基类,然后创建文件流继承流基类,最后创建加密文件流继承文件流、创建缓冲文件流继承文件流。如果这......