python基础之装饰器

装饰器的功能:在不改变原来函数结构的情况下,改变函数的功能。

装饰器函数:实际上就是一个闭包。

闭包: 函数内定义一个内函数,外函数return回内函数的引用,内函数使用外部函数的参数。

一、对无参函数装饰

#---------------------------------装饰器函数-------------------------------
>>> def outer(func):
	def inner( ):
		print("@@@@@inner@@@@@")
		func( )
	return inner
#---------------------------------需要被装饰的函数----------------------
>>> def f( ):
	print("@@原函数@@")
#------------------开始装置,将需要被装饰的函数func作为参数传入到装饰器函数outer中------------
>>> t=outer(f)         # t可以换成被装饰的函数名,即f=outer(f)
#---------------------------------装饰完毕,调用-----------------------------
>>> t()                #f()
@@@@@inner@@@@@
@@原函数@@

 将以上代码换为@形式:

>>> def outer(func):
	def inner( ):
		print("@@@@@inner@@@@@")
		func( )
	return inner
>>> @outer
    def f( ):
	print("@@原函数@@")	
>>> f()

@@@@@inner@@@@@
@@原函数@@

二、对有参函数装饰

>>> def outer(func):
	def inner(x,y):
		print("@@@@@inner@@@@@")
		func(x,y)
	return inner
>>> @outer
    def f(a,b):
	    print("a=%s,b=%s" %(a,b))	
>>> f(2,3)

@@@@@inner@@@@@
a=2,b=3

三、对有返回值函数装饰

>>> def outer(func):
	def inner(a,b):
		print("@@@@@inner@@@@@")
		x=func(a,b)
		return x  
	return inner    
>>> @outer
    def f(a,b):
	    print("a=%s,b=%s" %(a,b))
	    return "ok,finished"
>>> x=f(2,3)  
    
@@@@@inner@@@@@
a=2,b=3
>>> x       
'ok,finished'

四、通用装饰器:有参、无参,有返回、无返回

>>> def outer(func):
	    def inner(*args,**kwargs):      #参数的写法,被装饰函数有多少参数都可以
		    print("@@@@@inner@@@@@")
		    x=func(*args,**kwargs)      #参数的写法,被装饰函数有多少参数都可以
		    return x                    #此处写入返回,被装饰函数有没有返回都可以
	    return inner

>>> @outer
def f(a,b):
	print("a=%s,b=%s" %(a,b))
	return "ok,finished"

>>> x=f(2,3)
@@@@@inner@@@@@
a=2,b=3
>>> x
'ok,finished'

​

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值