0717py:装饰器


# 定义一个函数,参数为函数名,内部再创建一个函数
def zwai(func):
	zwai = 1

	print("我是函数zwai创建的变量|zwai=",zwai)

	# 创建内部函数
	def znei():
		print("我是内部函数znei,获取外部函数变量|zwai=",zwai)

		# 返回作为参数传入的参数,装饰器用法,要有小括号
		return func()

	# 外部函数返回内部函数,形成闭包,闭包语法内部函数不加小括号
	return znei

# 定义一个函数使用作为参数传入装饰器 zwai
def targ():
	targ = 2
	print("我是目标函数targ,我创建的变量|targ= ",targ)

# 将目标函数传入装饰器函数
# 一个括号,返回值是znei,也就是闭包
zwai(targ)

# 两个括号,闭包执行,闭包返回值函数执行
zwai(targ)()

# 以上就完成了原始的装饰器

# python的装饰器语法 @zwai  将装饰器语法用在定义目标函数前,就实现了将函数作为参数传入装饰器函数的效果
# 在调用函数的时候,直接调用目标函数,不用再写装饰器函数

print("<><><>")

# 使用装饰器语法
@zwai
def tarc():
	tarc = 3
	print("我是装饰器语法 @函数,传入的函数tarc,我创建的变量|tarc =",tarc)

tarc()

目标函数需要传参的装饰器语法

def zwai(func):
	# 目标函数有参数,其参数放在装饰器内部函数的参数中传入
	def znei(var1,var2):
		print("被装饰了")
		# 调用的时候要加入参数
		return func(var1,var2)
	return znei

@zwai
def tar(a,b):
	return a+b

print(tar(2,3))

装饰器需要参数的语法


# 最外层函数,其参数是装饰器自有参数
def wai(arg):

	# 中层函数,其参数就是要被装饰的目标函数
	def zhong(func):

		# 内层函数,其参数是目标函数所需的参数
		def nei(var):

			# 内层函数返回被装饰函数的调用
			return func(var)

		# 中层函返回内层函数
		return nei 

	# 外层函数返回中层函数
	return zhong 

# 目标函数使用装饰器
@wai(arg)
def fuc(var):
	pass

装饰器和目标函数都有参数的实例


def wai(arg):
	
	def zhong(func):

		def nei(var):
			if arg >= 0:

				return func(var)
			else:

				return func(var+100)

		return nei 

	return zhong 


# ss = 2
ss = -3
#用装饰器的参数实现了控制函调用返回值

@wai(ss)
def func(a):
	return a 

print(func(20))

猜你喜欢

转载自blog.csdn.net/whqwjb/article/details/81079555