python装饰器一个简单的应用模拟场景应用示例:
场景:定义一个付款流程,需要判断是否登录,只有登录的用户可以付款。不修改付款代码,使用装饰器进行处理
# -*- coding: utf-8 -*-
# @Time : 2021/3/26 10:44
# @Project : bocai_test
# @Author : testing
# @File : test.py
# @Software: PyCharm
# 初始化参数,表示未登录
is_login = False
# 定义装饰器
def login_required(func):
def wrapper(*args, **kwargs):
global is_login
print('-----验证是否登录-----')
if is_login:
print('---------------------- 用户已登录!')
func(*args, **kwargs)
else:
print('--------sorry!!!请登录之后,再付款!,1秒后返回登录页面')
is_login = login()
return is_login
return wrapper
# 定义一个登录
def login():
username = input('请输入用户名:')
password= input('请输入密码:')
if username == 'admin' and password == '123456':
return True
else:
return False
@login_required
def pay(money):
print('正在付款。付款的金额是{}'.format(money))
# 调用付款
pay(100)
# 再次调用
pay(800)
运行结果如下:
-----验证是否登录-----
--------sorry!!!请登录之后,再付款!,1秒后返回登录页面
请输入用户名:admin
请输入密码:123456
-----验证是否登录-----
---------------------- 用户已登录!
正在付款。付款的金额是800