闭包和装饰器

闭包
内部函数可以使用外部函数的变量称为闭包
函数嵌套
内部函数使用外部函数
外部函数返回内部函数
闭包格式:
def test1():
n = 1
def test2():
print(n)
return test2
闭包举例:
def show(name):
def test(msg):
print(name +’: '+msg)
return test2

tom = show(‘tom’)
tom(‘你好’)
jack = show(‘jack’)
jack(‘我不好’)
输出结果:tom: ‘你好’
jack: ‘我不好’
闭包修改外部函数变量:
使用nonloacl修改变量
def show():
n = 10
def inner():
nonloacl n
n += 10
return inner

func = show()
func()
装饰器:
在闭包函数的基础上添加额外的功能
不修改函数源代码
不修改函数调用方式
使用举例:

import  time
def show(func):
	def inner():
		start = time.time()
		func()
		end = time.time()
		print(f"一共用了(end-start)秒")
		return inner

@show
def test():
	for i in range(1000000):
		print(i)
		
test()		

通用装饰器使用:

def show(func):
	def inner(*args,**kwargs):
		print("开始装饰")
		func(*args,**kwargs)
		print("结束装饰”)
	return inner

@show
def  test(a):
	print(a)

test('hello')

多个装饰器

def show1(func):
	def inner(*args,**kwargs):
		print("装饰器1-1")
		func(*args,**kwargs)
		print("装饰器1-2")
		
def show2(func):
	def inner(*args,**kwargs):
		print("装饰器2-1")
		func(*args,**kwargs)
		print("装饰器2-2")

@show1
@show2
def  test():
	print("show........")

test()
#执行过程是由下到上执行

类装饰器

class  Show(object):
	def __init__(self,func):
		self.func=func
	def __call__(self,*args,**kwargs):
		print("开始装饰")
		self.func()
		print("结束装饰")

@show
def  test():
	print("show........")

装饰器传参

def get_args(msg):
	def  show(func):
		def inner(*args,**kwargs):
			print("请先" + msg)
			func()
			print("发表评论")
		return inner
	return show

@get_args('登录')
def test():
	print("登录成功")

test()

*装饰器执行顺序
单个装饰器执行过程图解
装饰器执行过程图解

多个装饰器执行过程
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值