Python之装饰器

装饰器的作用:

装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。

最简单的例子就是日志:

def func():
    print(func.__name__)

如果此时想打印一条log,可以这样写:

def func():
    logging.warn("this is")
    print(func.__name__)

使用这样方式的话,以后在其他方法里也必须这样写了,重复代码太多。
这个时候装饰器的价值就体现出来了。
装饰器本质是一个对象。以函数对象作为参数:

def deco(func):
    def wrapper(*args,**kwargs):
         logging.warn("this is")
         func()
    return wrapper

def func():
    print(func.__name__)

func = deco(func) #deco(func)返回的是一个函数对象
func() #函数对象func()才会执行这个方法

用@语法糖:

def deco(func):
    def wrapper(*args,**kwargs):
         logging.warn("this is")
         func()
    return wrapper
@deco
def func():
    print(func.__name__)
#!/usr/bin/python  告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#encoding="utf-8"
这样py文件中就可以输入中文了

#!/usr/bin/python相当于写死了python路径;
#!/usr/bin/env python会去环境设置寻找python目录,

你可能感兴趣的:(Python之装饰器)