装饰器Python】进阶知识点

news/2024/10/17 6:31:56/

要明白装饰器首先得知道闭包 

闭包:是内部函数对外部函数作用域的引用,并且一般外部函数函数的返回值是内部函数的函数名

               def outer(x):    # 外部函数
                      a = x * 2
                         def inter(b)  # 内部函数
                              return a + b   # inter 函数内部使用了outer函数内部的变量
                    return inter
              outer(1,2)

-装饰器:  @
      - 装饰器又叫语法糖,装饰器是一个闭包函数,装饰器的作用不会修改原有函数的功能,在原有的基础上添加自己的新的功能。 

def outer(func):    #3、  #  接受的这个参数 func  ==  operated函数名def inter():   # 5、b = 2      #6、result = func(b)   # 6、  # func(b)  == operated(b)return result    # 9、    # return operated(b)   ==  operated(b)函数的调用return inter    # 4、# return inter  # 返回函数名或者函数对象# return inter() # 返回函数调用@outer   # 2、装饰器
def operated(b):  # 7、c = 1         # 8、a = b + c     # 8、print(a)      #8、
operated()  # 1、

执行流程 : 1、如果你用到了装饰器 ,装饰器会把被装饰的函数名当作参数接受上来,并且再执行调用一次
        如果你调用 operated()  --> 首先会执行  @outer ,  @outer == outer(operated)()
     2、执行完outer(operated)返回了一个outer() 函数的内部函数名 ,inter,执行完outer(operated)() 是不是返回了inter(),效果是调用了内部函数inter()
     3、当执行 inter()[这是一个函数调用] 会执行inter()函数中的内容
                              b = 2
                              result = func(b)    #
      当执行到  result = func(b) 时,又是一个函数调用 ,调用了func(b),我们知道func 是被装饰函数传递过来的参数,operated
      func(b) == operated(b) 回调了,被装饰函数operated(),并且传入了参数b,并且将调用的结果

返回赋值给了resullt变量,
      最后一步返回变量 resullt 也就是返回了  operated(b) 函数执行的结果
 

 

疑惑点:

 执行   @outer  等于执行    outer(operated)()  ,执行完outer(operated)()  返回了return inter(),明明 operated并没有被传递,为什么inter()函数却可以调用 


http://www.ppmy.cn/news/206104.html

相关文章

R9 6900HX和i7 10875h选哪个

r9 6900hx采用Zen 3构架 6nm制作工艺 八核心 十六线程CPU主频 3.3GHz- 4.9GHz三级缓存 16MB热设计功耗(TDP) 45W 内存类型 DDR5集成显卡 选r9 6900hx还是i7 10875h这些点很重要看过你就懂了 http://www.adiannao.cn/dy i7-10875H是一款高端笔记本电脑处理器,具有基…

计算机专业选i5八代还是i7八代,七代酷睿i7与第八代酷睿i5哪个好

最近有很多童鞋都在给狗狗留言,问游戏本应该选七代酷睿i7,还是选择八代酷睿i5?这个问题其实很有代表性,随着H系列八代酷睿处理器的上市,老平台游戏本的价格也在缓缓回落,最终出现了七代i7和八代i5基本持平或…

java 笔记本i7 i5_笔记本i7好还是i5好_笔记本i5和i7哪个好-系统城

我们在选购笔记本的时候,常常会因为市场上笔记本的种类太多而感到烦恼,同时也会对i5处理器和i7处理器的选择产生犹豫。那么笔记本电脑是i5好还是i7好呢?其实这两者之间还是会有很大的区别的,接下来小编就给大家讲讲笔记本电脑i5和…

计算机专业笔记本用i5还是i7,玩游戏笔记本i5和i7的区别_笔记本电脑游戏用i5还是i7...

笔记本i5和i7有什么区别呢?我们在买新笔记本电脑的时候,通常都会对处理器进行挑选,特别是那些追求配置的用户,可是在遇到i5和i7笔记本时,有的用户不知道用i5好还是i7好,也不知道它们之间的区别,…

i7-10875H 怎么样 相当于什么水平

i7-10875H是一款高端笔记本电脑处理器,具有基于Comet Lake架构(CML-H,第四代Skylake)的八个内核。 i7-10875H 怎么样看完你就知道了 https://list.jd.com/list.html? 该处理器的频率在2.1到4.5 GHz之间,可能在4.5 GHz…

华硕i7计算机配置,i7电脑配置清单

【i7电脑配置清单】 配置说明: Intel 酷睿i7 4790 Intel 酷睿i7 4790具备四核处理核心,主频为3.6GHz,在智能睿频加速技术的帮助下可最高提升至4.0GHz,运算性能极为强悍,LGA 1150插槽也能够与市面上大部分主板兼容。另外…

i9 10885h和i7 10875h 哪个好

英特尔i9-10885H为8核16线程,主频2.4GHz,睿频5.3GHz,参数与i9-10980HK相同 选i9 10885h还是i7-10875H 这些点很重要!看完你就知道了 https://list.jd.com/list.html? i7-10875H是一款高端笔记本电脑处理器,具有基于Comet Lake架…

i7 10870h和i7 10875h 的区别

i7-10870H 处理器拥有 8 核心 16 线程,基础频率 2.2GHz,加速频率 5.0GHz,L3 缓存 16MB。相比之下,i7-10750H 为 6 核心 12 线程,基础频率 2.6GHz,加速频率 5.0GHz,L3 缓存 12MB。 选i7 10870h还…