Python_@修饰器(装饰器)的理解

匿名 (未验证) 提交于 2019-12-02 22:51:30

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

装饰器的作用就是为已经存在的对象添加额外的功能。

def funA(fun):     print (fun())  def funB():     print ('B')     return 1  funA(funB) ----------------------------- >>> B 1

可以看出,这个程序的运行过程为:

1.执行函数funB,输出了一个B,另外返回了一个值:1

2.执行函数funA,把funB返回的值1给输出了出来

而修饰器的作用:

def funA(fun):  #函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用,而funB是有返回值的,所以结果输出了返回值1.(个人理解)     print (fun())  @funA def funB():     print ('B')     return 1 ---------------------- >>> B 1

作用相当于 funA(funB),不过只能放在一个函数或者类定义之前

需要注意的是,如果funB在funA里没用被调用的话,那funB是不会被执行的,如:

def funA(fun):     print ('funA')  @funA def funB():     print ('B')     return 1 --------------------------- >>> funA

可以看出,只执行了funA而funB没有被执行,因为print('B')并没有被打印出来.

ps:如果funA不加参数的话,比如直接 def funA(): 这样定义,他是会报错的:

@funA TypeError: funA() takes 0 positional arguments but 1 was given

大意是@funA中的funA必须要给他提供一个参数,但是你给了0个.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!