美文网首页
详解Python装饰器

详解Python装饰器

作者: 蕴重Liu | 来源:发表于2019-07-10 15:46 被阅读0次

基础

def get_list():    
  print('halo')
  return 'result'

get_list()

函数名:def_get_list
函数体:def get_list():    
           print('halo')
           return 'result'
返回值:'result',默认返回None
函数的内存地址:当函数体被读进内存后的保存位置,由标识符即函数名get_list引用,即get_list指向的是函数体在内存内的保存位置。
函数名加括号:函数的调用方法,只有见到这个括号,程序会根据函数名从内存中找到函数体,然后执行它

注意:函数名、函数加括号(函数的返回值)可以被当做参数传递,也可以被当做返回值return

内部原理

    def wrapper(func):
        def inner(cls, *args, **kwargs):
            print('func 前')
            result = func(cls, *args, **kwargs)
            print('func 后')
            return result
        return inner

@wrapper
def get_list():
    print('ok')
  1. 把wrap函数体加载到内存中
  2. 读到@wrapper时,识别到是装饰器,按规矩要立即执行,于是程序开始运行wrapper
  3. 程序返回wrapper函数,开始执行装饰器的语法规则
    规则:被装饰的函数的名字会被当作参数传递给装饰函数;装饰函数执行内部代码后,会将它的返回值赋值给被装饰的函数。
注意:@wrapper 和 @wrapper() 有区别,涉及到装饰器的高级用法
outer函数return的是inner这个函数名,而不是inner()这样被调用后的返回值
  1. 程序执行wrapper函数内部的内容,可在inner函数前增加装饰器。inner函数定义块被程序观察到后不会立刻执行,而是读入内存中。
  2. return inner,返回值是函数名,且函数名会被赋值给get_list,即 get_list = inner。此时,get_list 被 inner覆盖(实际上是get_list更改成指向inner的函数体内存地址,get_list不再指向原来函数体的内存地址),再调用 get_list 时执行 inner 函数的代码,而不是先前的函数体。变量 func 保存了 函数 get_list 在内存中的地址,通过地址执行 函数get_list-----result = func 就是这么干的
  3. 调用 函数get_list()时,执行的不是老的 get_list()的代码,而是inner函数的代码。

相关文章

  • python 装饰器

    参考链接:详解Python的装饰器

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • Python装饰器的另类用法

    原文出处: cicaday 之前有比较系统介绍过Python的装饰器(请查阅《详解Python装饰器》),本文算是...

  • java动态代理,python装饰器

    原文:java的动态代理机制详解 - xiaoluo501395377 - 博客园 python装饰器

  • 学习记录

    Python基础中的高级专题装饰器详解:https://www.bilibili.com/video/av1275...

  • python装饰器详解

    本文来自我的博客 引入装饰器的思想: 如果我们想为某一个功能添加一个新的功能,如何在不改变他的原来的函数名的情况下...

  • python 装饰器详解

    前言 这篇文章打算写下关于python3中装饰器的一些认识,提高一下知识水平 1 装饰器是啥 装饰器本质上是一个 ...

  • 详解Python装饰器

    基础 注意:函数名、函数加括号(函数的返回值)可以被当做参数传递,也可以被当做返回值return 内部原理 把wr...

  • python——装饰器详解

    一、装饰器概念 1、装饰器 装饰器:一种返回值也是一个函数的函数,即装饰器。 2、装饰器目的 装饰器的目的:装饰器...

  • python装饰器详解

    一、什么是装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外...

网友评论

      本文标题:详解Python装饰器

      本文链接:https://www.haomeiwen.com/subject/nnchkctx.html