修饰器

作者: 青铜小火锅 | 来源:发表于2018-07-20 14:15 被阅读0次

函数修饰符@,在函数定义时使用,放在函数前一行,对下一行的函数起修饰(修改)作用。
被修饰函数会作为参数传递给修饰函数,然后返回修饰函数的返回值;经过修饰后,被修饰函数的内容将被修饰函数修改,以后再次调用被修饰函数时,调用的将是修改后的函数,其实就是将被修饰函数变成了修饰函数的返回值。例如:

def a(func):
  pass
  return x 
@a
def b():
  pass

以上语句的效果等同于

def a(func):
  pass
  return x
def b():
  pass
b=a(b)

经过了a修饰的b,其实已经被替换成了函数a中的x,b=a(b),即b=x,甚至x可能只是个整数,那么b就从一个函数变成了整数!听起来很不可思议!这已经不是修饰了,直接从老虎改成猪了,面目全非!
当然,一般不会这么干,一般情况下x也就是一个包含了b的函数,即在a的内部定义一个函数x,x包含了a的部分内容(由于函数定义在a的内部,所以b作为a的参数,对于x是可见的)。
如下:

def a(func):
  def x():
    pass
    func()
    pass
    return ...
  return x
def b():
  pass
b=a(b)

带参数的修饰器

使用这个语法时,“@a”将后面的函数作为参数值传入a中,我们也可以使用“@(arg)”来传入我们想要传入的参数,此时b就没有被传入a中,而是作为函数a返回值x的参数,调用x(b)作为最终修改后的b,在这种情况下,x必须是一个函数。

def a(arg):
  pass
  return x 
@a(arg_)
def b():
  pass

等同于

def a(arg):
  pass
  return x 
def b():
  pass
b=(a(arg_))(b)

带参数的修饰器,相当于b=(a(arg_))(b),即b=x(b)

类修饰器

修饰符不仅能以函数为修饰,也能以类为修饰。...

相关文章

  • 类的修饰器

    是什么 修饰器是一个对类进行处理的函数。修饰器不仅可以修饰类,还可以修饰类的属性,但是修饰器不能用于函数。 怎么用...

  • 修饰器

    函数修饰符@,在函数定义时使用,放在函数前一行,对下一行的函数起修饰(修改)作用。被修饰函数会作为参数传递给修饰函...

  • 修饰器

    类的修饰 § ⇧ 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为。目前,有一个提案将这项...

  • 修饰器

    一、Babel 环境配置 安装依赖 配置 .babelrc 文件 运行文件 Babel 的官方网站提供一个在线转码...

  • 修饰器

    内置修饰器: staticmethod、classmethod和property 作用:把类中定义的实例方法变成静...

  • python修饰器的特殊用法

    最基本的修饰器包括了无参数的修饰器和带参数的修饰器,这两种修饰器都是针对函数的,讲解的博客已经很多了,就不再赘述了...

  • es6 修饰器

    写在前面,因为function存在变量提升,所以修饰器是只能修饰类,而不能修饰函数 修饰器是一个函数,用来修改类的...

  • es6学习笔记整理(十六)Decorators

    Decorator修饰器 修饰器是一个函数用来修改类的行为: 1、修饰器是一个函数 2、修改行为 3、修改类的行为...

  • ES6-修饰器

    首先放一段示例代码 代码中@testable即为一个修饰器。可以看到,修饰器本质上是一个函数。将类作为修饰器函数的...

  • ES6_修饰器

    修饰器@ 只能用于类 和 类的方法 类的修饰器 修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时 方法的...

网友评论

      本文标题:修饰器

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