29 叠加多个装饰器

# 1、无参装饰器的模板
def outter(func):
	def wrapper(*args, **kwargs):
		res = func(*args, **kwargs)
		return res

	return wrapper


# 2、叠加多个装饰器
# 2.1 加载顺序:自下而上
# 2.2 执行顺序

def deco1(func1):  # func1 = wrapper2的内存地址
	def wrapper1(*args, **kwargs):
		print('wrapper1====>')
		res1 = func1(*args, **kwargs)
		return res1

	return wrapper1


def deco2(func2):  # func2 = wrapper3的内存地址
	def wrapper2(*args, **kwargs):
		print('wrapper2====>')
		res2 = func2(*args, **kwargs)
		return res2

	return wrapper2


def deco3(func3):  # func3 = 最原始的那个被装饰函数的内存地址
	def wrapper3(*args, **kwargs):
		print('wrapper3====>')
		res3 = func3(*args, **kwargs)
		return res3

	return wrapper3


# index=wrapper1的内存地址


@deco1  # deco1(wrapper2的内存地址)=>wrapper1的内存地址
@deco2  # deco2(wrapper3的内存地址)=>wrapper2的内存地址
@deco3  # deco3(最原始的那个被装饰函数的内存地址)=>wrapper3的内存地址
def index(x, y):
	print('index=>', x, y)


index(1, 2)

"""
wrapper1====>'
wrapper2====>
wrapper3====>
index=>1,2
"""

import time


def timer(func):
	# func = index
	def wrapper(*args, **kwargs):
		start = time.time()
		func(*args, **kwargs)
		end = time.time()
		print(f'run time is {end - start}')

	return wrapper


def login(func):
	def wrapper(*args, **kwargs):
		while True:
			ip_name = input('name:')
			ip_psw = input('psw:')
			if ip_name == 'egon' and ip_psw == '123':
				print('登录成功!')
				res = func(*args, **kwargs)
				return res
			else:
				print('登录失败!')
				break

	return wrapper


@timer  # 统计的下面的装饰器的时间
@login
def index(x, y):
	time.sleep(1)
	print(f'index-----> {x}, {y}')
	return 123


index(111, 222)

加载/执行顺序说明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值