由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
- 函数可以被赋值给其他变量
- 函数可以被删除
- 可以在函数里面再定义函数,函数嵌套。
- 函数可以作为参数传递给另外一个函数
- 函数可以作为另一个函数的返回值
所谓装饰,就是接收一个东西,然后加上一些东西后还回去。装饰器就是干这种事的。
目录
1.最简单的装饰器
def decorate(f):
def fun(*args,**kw):
ret = fun(*args,**kw)
return '<start> '+ ret +' <end>'
return fun
def hello():
return 'hello python'
hello = decorate(hello)#hello = fun , hello()= fun() ='<start> '+f()+' <end>'
print(hello())
其中*args,**kw是为了适应可变参数,因为装饰器装饰的函数的参数是不确定的,这么写可以适应其参数,还是把参数传递给了该函数,装饰器只起到一个桥梁作用。
2.使用@符号代替装饰语句
用来简化操作,@decorate放在hello()函数的定义前面相当于之后写hello = decorate(hello) 语句
def decorate(f):
def fun(*args,**kw):
ret = f(*args,**kw)
return '<start> '+ret+' <end>'
return fun
@decorate
def hello():
return 'hello python'
#hello = decorate(hello) @decorate相当于这一句,这里不需要了
print(hello())
3.使用多个装饰器
使用多个装饰器时,靠近函数的装饰器先进行装饰
def decorate1(f):
def f