装饰器的作用:
装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。
最简单的例子就是日志:
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目录,