2019-05-26python装饰器到底是什么?
2019-05-26 本文已影响0人
测序九月
装饰器例子
参考语法
def mydecorator(func):
def wrapper(*args,**kargs):
'''wrapper function'''
print("in wrapper")
func(*args,**kargs)
return wrapper
@ mydecorator
def example():
"""example function"""
print("in example")
装饰器是什么?
个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本语法,只是一种框架,
比如上述代码,我想在example函数输出前,输出in wrapper这句话
我可以怎么做?
print("in wrapper")
example()
但是我想在多个函数比如还有example2,example3前输入同样的话
def example_all(func):
print("in wrapper")
func()
编程思想之一,定义函数,减少重复写代码
example_all(example)
然后调用
map(example_all,(example,))
函数多就直接map
example = example_all(example)
以后调用example实际是调用example_all(example)
我们在定义example_all时调用了func(),我们知道func函数自身要传入参数,
直接传参?
>>>def mydecorator2(func):
print("haha")
func(*args,**kargs)
>>> mydecorator2(example)()
haha
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
mydecorator2(example)()
File "<pyshell#41>", line 3, in mydecorator2
func(*args,**kargs)
NameError: name 'args' is not defined
报错args和*kargs未定义,说明这两兄弟只能在def中用。
总结
敲黑板,重点,
1、装饰器的写法,要在函数中定义一个函数,一般写wrapper,主要是为了用args,*kargs传参不报错。
1、1 记得return wrapper,不然只定义不执行,没什么用。