PYTHON装饰器3

装饰器是函数就会有参数?NO,参数给的是产生装饰器的函数。

def log(logfile='out.log'):
	def  log_decorateor(function):
		def wrapper_wrap_the_target_function(*args,**kwargs):
			log_str="LOG:#THE FUCTION '"+function.__name__+"()' WAS CALLED."
			print(log_str)
			with open(logfile,'a') as opened_file:
				opened_file.write(log_str+'\n')
			return function(*args,**kwargs)
		return wrapper_wrap_the_target_function
	return log_decorateor



#此处不是@log,而是@log()
@log()
def doSomething():
	print("噼里啪啦一顿操作")



@log(logfile='add.log')
def add(a,b):
	result=a+b
	print("{0}+{1}={2}".format(a,b,a+b))


if __name__ == '__main__':
	doSomething()
	add(10,20)

  

上面的@后面跟的就不是装饰器的名称了,而是产生装饰器的函数,通过执行这个函数,给下面需要被装饰的函数生成一个装饰器。

猜你喜欢

转载自www.cnblogs.com/luohaonan/p/8940744.html