python3装饰器用法示例
装饰器在编写后台的逻辑时有可能会用到,比方说一个场景:公司的员工想要登录自己公司的考勤记录系统去修改自己的考勤,以前是随便谁都有权限去修改,这样老板不同意了,现在,要在你登录前加一个权限验证的逻辑,如果你权限没有达到等级要求,你就不能登录系统去修改自己的考勤记录。如何在不改动原函数的情况下去增加这部分权限验证的功能呢?这就用到的装饰器函数。
装饰器函数的一大有点就是,在不改动原函数的基础上,去给函数增加新的功能。
装饰器有两种,一种是没有参数的,一种是有参数的,本示例两种装饰器都有,不过只运行了有参数的。
有关用法和解释在代码中已经注释。下面是一个例子。
- # 装饰器函数的两个特点,也是必须满足的条件
- # 1. 闭包
- # 2. 外部函数的返回值必须是内部函数
- # 这是一个没有参数的装饰器的例子
- def decorator(func):
- def wrapper():
- print('在登录前,先检查有没有此账号。')
- # !@#$%^&*,在数据库中查询
- # 如果数据库的已注册表中查到此用户,就执行登录函数 login()。
- # 如果没有查到,则显示“请先注册,然后登录”
- func()
- return wrapper
- # 上面已经写好了一个装饰器,下面是用法
- @decorator
- def login1():
- # 比方说这里是一段很复杂的逻辑,现在用登录操作代替
- print('我现在要登录了')
- # 这是一个有参数的装饰器例子
- def decorator2(func):
- def wrapper2(name):
- # 数字越小,权限越高
- priLevelDict = {'赵总': 1, '赵总': 2, '小王': 3}
- # 判断字典中是否存在某个key,可以用 in 或者 not in来判断
- # print('小王' in priLevelDict)
- if name in priLevelDict:
- print('正在对{}进行权限验证'.format(name))
- # 如果权限验证通过,则可以进行下一步的登录,管理
- # 如果权限验证不通过,则不能登录。逻辑自己设计就好
- # print(priLevelDict[name])
- if priLevelDict[name] == 1 or priLevelDict[name] == 2:
- print('验证通过')
- func(name)
- elif priLevelDict[name] == 3:
- print('对不起,{},您没有权限登录,请有点自知之明。'.format(name))
- print()
- else:
- print('你tm是谁啊,数据库里都找不到你,滚犊子。')
- return wrapper2
- @decorator2
- def login2(name):
- print('尊敬的{}, 现在您可以登录管理系统进行管理'.format(name))
- print()
- if __name__ == '__main__':
- while 1:
- name = input('请输入你的姓名:')
- login2(name)
运行结果:
- 请输入你的姓名:赵总
- 正在对赵总进行权限验证
- 验证通过
- 尊敬的赵总, 现在您可以登录管理系统进行管理
- # 这可是领导,老板要查岗,必须得通过啊
- 请输入你的姓名:钱经理
- 正在对钱经理进行权限验证
- 验证通过
- 尊敬的钱经理, 现在您可以登录管理系统进行管理
- # 这是顶头上司,也要好好巴结一下
- 请输入你的姓名:小王
- 正在对小王进行权限验证
- 对不起,小王,您没有权限登录,请有点自知之明。
- # 这是同事,说话比较随意
- 请输入你的姓名:老李
- 你tm是谁啊,数据库里都找不到你,滚犊子。
- # 这不是我们公司员工 ,不用客气
- 请输入你的姓名:
python3装饰器用法示例的更多相关文章
- Python学习第四十天函数的装饰器用法
在软件开发的过程中,要遵循软件的一些原则封装的,不改变原有的代码的基础增加一些需求,python提供了装饰器来扩展函数功能,下面说说函数装饰器用法 def debug(func): def ...
- 净心诀---python3装饰器
python3装饰器 装饰器作用 简单理解:可以为已有函数添加额外功能 例: 已有2个函数如下 def MyFunc1(): print("This is a print function1 ...
- Python装饰器用法
在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...
- python3 装饰器应用举例
[引子] python 中的装饰器是oop(面向对象编程)设计模式.之装饰器模式的一个应用.由于有语法糖衣的缘故.所以写起来也更加方便 [从一个比较经典的应用场景来讲解装饰器] 有过一定编程经历的工程 ...
- python3 装饰器全解
本章结构: 1.理解装饰器的前提准备 2.装饰器:无参/带参的被装饰函数,无参/带参的装饰函数 3.装饰器的缺点 4.python3的内置装饰器 5.本文参考 理解装饰器的前提:1.所有东西都是对象( ...
- python3装饰器
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >> ...
- python3 装饰器
#Author by Andy#_*_ coding:utf-8 _*_#装饰器的原则及构成:# 原则:# 1.不能修改被装饰函数的源代码.# 2.不能修改被装饰函数的调用方式.# 3.不能改变被装饰 ...
- python3 装饰器初识 NLP第三条
还是先抄一条NLP假设... 三,有效果比有道理更重要 光说做法有道理或者正确而不顾是否有效果,是在自欺欺人. 在三赢(我好,人好,世界好)的原则基础上追求效果,比坚持什么是对的更有意义. 说道理 ...
- PYTHON装饰器用法及演变
'''开放封闭原则: 软件一旦上线之后就应该满足开放封闭原则 具体就是指对修改是封闭的,对扩展是开放的装饰器:什么是装饰器:装饰就是修饰,器指的是工具装饰器本省可以是任意可调用的对象被装饰的对象也可以 ...
随机推荐
- 华为云OCR文字识别 免费在线体验!
嘿,华为云OCR文字识别了解一下,免费在线体验! 物流行业快速提取运单信息.医疗/保险行业单据快速录入.政务办事人证检验,你知道这些都是如何实现的么? 答案就是:OCR文字识别! 作为AI时代效率倍增 ...
- luogu P2272 [ZJOI2007]最大半连通子图
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若 ...
- 大数据之Linux进阶指令
1.文件内容操作相关命令 cut 根据条件 从命令结果中 提取 对应内容 -c 按字符选取内容 例子:head -2 1.txt | cut -c 5 截取前两行的第五个字符 -d '分隔符' ...
- DAO模式多表联查
student类: package com.myschool.entity; public class student{ private int studentno; //学号 private S ...
- [TimLinux] JavaScript 原生AJAX介绍
1. AJAX 异步JavaScript + XML,用于浏览器内部通过前端JavaScript语言操纵,与HTTP服务器进行连接通信的技术. 2. XMLHttpRequest对象 从IE7+,以及 ...
- dockerfile 最佳实践及示例
Dockerfile 最佳实践已经出现在官方文档中,地址在 Best practices for writing Dockerfiles.如果再写一份最佳实践,倒有点关公门前耍大刀之意.因此本篇文章是 ...
- UESTC-1963咸鱼咕咕咕(二分图匹配)
咸鱼咕咕咕 Time Limit: 1000 MS Memory Limit: 64 MB Submit Status 咸鱼有个咕咕笼. 咕咕笼可以划分成m×nm×n个格子,每个小格子可以放下 ...
- Zabbix 监控MySQL、Apache、Nginx应用监控
zabbix对第三方应用软件的监控,主要有两个工作难点,一个是编写自定义监控脚本,另一个是在编写模板并导入zabbix web中,编写脚本这个要根据 监控需求定制即可,而编写模板文件有些难度,不过网上 ...
- Python学习心得体会总结,不要采坑
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:樱桃小丸子0093 大家要持续关注哦,不定时更新Python知识 ...
- iSensor App Kit 测试之 MT9V111 MT9M111 MT9D111
iSensor App Kit 可以调试测试一切常规的sensor,对于ccusb20底板,可以直接兼容官哥所有的dvp接口的摄像头,分辨率从30w到1400w均没问题. 今天又测试了三款sensor ...