详解Python装饰器
作者:Lockegogo 发布时间:2023-11-12 12:40:06
标签:Python,装饰器
1. 定义
本质是函数,用来装饰其他函数,为其他函数添加附加功能
2. 原则
a. 不能修改被装饰函数的源代码
b. 不能修改被装饰的函数的调用方式
3. 实现装饰器知识储备
a. 函数就是变量
b. 高阶函数
i. 把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为其添加功能
ii. 返回值中包含函数名, 不修改函数的调用方式
c. 嵌套函数
高阶函数+嵌套函数==》装饰器
# Author: Lockegogo
user, passwd = 'LK', '130914'
def auth(auth_type):
print('auth func:', auth_type)
def outher_wrapper(func):
def wrapper(*args, **kwargs):
print('wrapper func:', *args, **kwargs)
if auth_type == 'local':
username = input('username:').strip()
password = input('password:').strip()
if user == username and password == passwd:
print('\033[32;1mUser has passed authentication\033[0m')
res = func(*args, **kwargs)
return res
else:
exit('\033[32;1mInvalid Username or password\033[0m')
elif auth_type == 'ldap':
print('ldap,不会')
return wrapper
return outher_wrapper
def index():
print('welcome to index page')
@auth(auth_type='local') # home = outher_wrapper(home)
def home():
print('welcome to home page')
return 'from home'
@auth(auth_type='ldap')
def bbs():
print('welcome to bbs page')
index()
print(home())
bbs()
Decorator
以上所述是小编给大家介绍的Python装饰器详解整合,希望对大家有所帮助.
来源:https://www.cnblogs.com/lockegogo/p/10591160.html
0
投稿
猜你喜欢
- 如何用JMail同时给多人发信?在ASP中,为什么我在Jmail收件人处指定多个收件人时,像这样:JMail.AddRecipient&nb
- 日前,Mozilla 的 Arun Ranganathan 向 W3C 提交了一个草案,旨在推出一个 JavaScript API,让 Ja
- 这是一款简单,方便,功能齐全的分页类,可以根据自己的需要更改CSS样式文件以实现分页颜色的控制,利用p
- 近日因为升级系统的需要,将旧mysql数据库从3.23升级到5.0.41先从mysql3.23中mysqldump出数据文件data.sql
- 本文实例讲述了thinkphp的URL路由规则与配置方法。分享给大家供大家参考。具体分析如下:一、URL规则1、默认是区分大小写的2、如果我
- 01、正则表达式学习正则表达式操作字符串,re模块是用C语言写的没匹配速度非常快,其中compile函数根据一个模式字符串和可选的标志参数生
- WEB程序员的技能要求: Web程序员不光要对 后端程序(如 php,jsp,asp.net)语言知识,对程序设计架构知识,数据库
- <input type=button value=刷新 onclick="window.location.reload()&
- 本文实例讲述了PHP实现的AES双向加密解密功能。分享给大家供大家参考,具体如下:<?php/* * Created on 2018-
- Eric A. Meyer 对基于 Web 标准的 CSS 与 HTML 绝非一知半解,他是这个领域杰出的专家,曾写过不少 CSS 方面的书
- 问题作为一个负责几个服务器的数据库管理员,我接到许多电话是关于磁盘空间的。我所做的第一件事是找到可以缩小的数据文件来释放一些磁盘上的空间。我
- 经常在网上冲浪的朋友是否曾注意到有些网站的鼠标不是规则的斜向上箭头的形状,而是"十"
- 最近尝试了mysql的最新版本5.5.581.最新发布的mysql 5.5.8没有适合solaris 9的版本;这个在安装时需要注意2.它发
- 一:安装pip install web.py二:URL 处理任何网站最重要的部分就是它的URL结构。urls=('/',
- 以发布目录为例:<OBJECT ID="agobjOraSession" RUNAT=&quo
- Rs.Open参数说明在ASP中经常用Rs.Open sql,conn,1,1这样的方式打开数据库,但仍有一部分同行不知道这是嘛意思,现整理
- 我的工作内容可以说是五花八门,策划、文案、设计(包括平面设计、网站设计、VIS设计)、前端代码、交互、测试、摄影、项目管理等。所有这些工作最
- 测试代码:输出简单的ul li1.asp代码如下:<% response.write "<ul>" r
- 类的代码: define('QR_MODE_NUL', -1); define('QR_MODE_NUM',
- 如何准确地获得一个整数?当然可以,Format就是做这个的“专家”:function NumbersOnlyNoDecimals(