Python基础学习:函数装饰器

装饰器是python中非常实用的函数表达法,尽头我们不讲装饰器原理,只讲怎么应用。装饰器原理涉及面向对象以及函数本身也可以作为一个参数被传递,原理比较简单,但由于循环嵌套初学者难以理解。既然难以理解,那就先学会怎么用,有了经验,理解起来就相对容易了。首先我们要明白,装饰器内函数是先于被装饰函数执行的。

1.最简单的装饰器

def test(func):  #不带参数的函数装饰器最外层,也是该装饰器的名字                 
	def wrapper(*args,**kwargs):    #装饰函数,一般不建议修改名称和括号内参数,
									#以确保被装饰函数的参数可以被顺利传递,也可
									#根据被装饰函数的参数进行修改
		print('This is wrapper lambda function')#装饰函数自身的函数体,你所
												#要为被装饰函数增添的功能应当在这里写出
		return func(*args,**kwargs)#装饰函数返回值,不建议修改,若修改理由同该函数定义层所述。此外,已经在上面语句调用了被装饰函数的话,可以修改为自己需求的返回值。
	return wrapper                 #返回值为装饰函数名,需随其名称改变而改变,一般不建议修改

@test      #装饰器语法糖,表明用该装饰器装饰紧跟其下定义的函数
def test_1():    #被装饰函数
	print("This is decorated function") #被装饰的函数函数体

test_1() #调用被装饰后的test_1函数,它可以实现自己函数体内的功能,以及装饰函数函数体内的功能 
	

2.带参数的装饰器

带参数的装饰器需要三层结构

def test(para_1):  #不带参数的函数装饰器最外层,也是该装饰器的名字,其参数为装饰函数所需要的参数,
				   #该参数在装饰器语法糖内被赋值
	def decorator(func)                
		def wrapper(*args,**kwargs):    #装饰函数,一般不建议修改名称和括号内参数,
										#以确保被装饰函数的参数可以被顺利传递,也可
										#根据被装饰函数的参数进行修改,可以在该函数
										#内使用装饰器语法糖内传递进来的参数
										
			if para_1 == 'true'							#装饰函数自身的函数体,你所
				print('This is wrapper lambda function')#要为被装饰函数增添的功能应当在这里写出
													   
													
			return func(*args,**kwargs)#装饰函数返回值,不建议修改,若修改理由同该函数定义层所述
		return wrapper                 #返回值为装饰函数名,需随其名称改变而改变,一般不建议修改
		
	return decorator                   #返回值为第二层装饰函数名,一般不要修改,它只是为了让参数
									   #传递符合语法规范才出现

@test(para_1 = 'true')      #装饰器语法糖,表明用该装饰器装饰紧跟其下定义的函数
def test_1():    #被装饰函数
	print("This is decorated function") #被装饰的函数函数体

test_1() #调用被装饰后的test_1函数,它可以实现自己函数体内的功能,以及装饰函数函数体内的功能 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值