python装饰器

关键点:

写装饰器一定要搞定楚函数名后面带小括号和不带小括号的含义。带小括号,表示调用这个函数,而不带小括号,则表示的是该函数引用地址


假设存在函数b

In [1]: def b(): 
   ...:     print("123")

示例:

a = b()表示调用b函数,即会输出“123”,使用is查看 a 与 b并不指向一个对象

1 In [2]: a=b()                                                                   
2 123

In [8]: a is b                                                                  
Out[8]: False

a=b 则表示a引用了b的内存地址 ,并不会输出“123”,使用is可以看到a与b指向的是一个相同的对象

In [3]: a=b                                                                     

In [4]: a is b                                                                  
Out[4]: True

In [5]: a()                                                                     
123

 

不带参数的装饰器

 1 def debug(func):  #1
 2     def wrapper():#4
 3         print ("[DEBUG]: enter {}()".format(func.__name__))#7
 4         return func()#8
 5     return wrapper #5
 6 
 7 def say_hello():#2
 8     print ("hello!")#9
 9 
10 say_hello = debug(say_hello)  # 添加功能并保持原函数名不变  3 执行这句代码后 调用debug(say_hello),return wrapper,相当于say_hello=wrapper
11 
12 say_hello()#6 这里就相当于是调用 wrapper()

 

上一篇:SpringMVC通过静态方法获得请求


下一篇:Java面向对象-多态