Python 基础 6、 装饰器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40603236/article/details/82345258

什么是装饰器,装饰器是 Python 中特殊的语法糖, 它的作用就是用来装扮函数

在开发过程中我们都要遵循 开放封闭 原则 ,尽量别改动原来的代码,更多的是扩长代码功能

怎么在不修改代码的前提做到给代码加功能呢,那就是装饰器出场的时候了

# coding:utf-8


def test (func):
	"""基础装饰器"""

	def swap ():
		print ('---1------')
		func ()
		print ('----2----')

	return swap


@test
def test2 ():
	print (2222)


test2 ()


def f1 (func):
	"""对带参数的函数进行装饰"""

	def wapper (*args, **kwargs):
		print ('对带参数的函数进行装饰')
		func (*args, **kwargs)

	return wapper


@f1
def test3 (x, y):
	print (x + y)


test3 (1, 4)


def f2 (func):
	"""对有返回值的函数进行装饰"""

	def wapper ():
		print ('对有返回值的函数进行装饰')
		ret = func ()
		return ret

	return wapper


@f2
def test4 ():
	return 22


print (test4 ())


def f3 (func):
	"""
	通用装饰器
	即对有参数有返回值的函数进行装饰
	"""

	def wapper (*args, **kwargs):
		ret = func (*args, **kwargs)
		return ret

	return wapper


@f3
def test5 (a, b):
	print ('-----test5------')
	return (a * b)


print (test5 (2, 4))


def f4 (parameter):
	"""
	装饰器自身带有参数
	:param parameter:
	:return:
	"""

	def f (func):
		print ('我要开始加入我的装饰器参数了(%s)' % parameter)

		def wapper (*args, **kwargs):
			print ('---带有参数的装饰器-----')
			c = func (*args, **kwargs)
			return c

		return wapper

	return f


@f4 ('haha')
def test6 (a, b):
	print ('----test6----')
	return a - b


print (test6 (10, 3))

装饰器基本应用(权限验证,日志写入、等)

这里我们以日志为例

import  os,time
# 装饰器使用实例(写入日志)

def logfunc(func):
	def wapper(*args,**kwargs):
		starttime=time.time()
		ret = func (*args, **kwargs)
		endtime=time.time()
		runtime=endtime-starttime
		with open(os.path.dirname(os.path.abspath('.'))+r"/test.log",'a') as f:
			f.write(" 正在运行的函数是 (%s),\n"
					"此函数使用到的参数是 (%s,%s),\n"
					"返回值是(%s),\n "
					"程序运行时间time: %s"%(func.__name__,*args,*kwargs,ret,runtime))
			return ret
	return wapper

@logfunc
def test_log(path,name):
	print(path)
	print(name)

test_log('当前路径','文件名')

猜你喜欢

转载自blog.csdn.net/weixin_40603236/article/details/82345258