python装饰器概念与应用

格式一:装饰器外层不传参,内层传参

user_status = False  # 用户登录了就把这个改成Truedef login(func):  # 把要执行的henan模块从这里传进来def inner(*args, **kwargs):  # 再定义一层函数,参数为henan的参数_username = "alex"  # 假装这是DB里存的用户信息_password = "abc!23"  # 假装这是DB里存的用户信息global user_statusif user_status == False:username = raw_input("user:")password = raw_input("password:")if username == _username and password == _password:print("welcome login....")user_status = Trueelse:print("wrong username or password!")if user_status == True:func(*args, **kwargs)  # 看这里看这里,只要验证通过了,就调用相应功能return inner  # 用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

@login  #注意因为这里没有传参,所以没有括号
def henan(t):print "henan********,%s" %thenan("henan args")

运行结果--

user:alex
password:abc!23
welcome login....
henan********,henan args

 

格式一:装饰器外层传参,内层传参

user_status = False #用户登录了就把这个改成Truedef login(auth_type): #把要执行的参数从这里传进来def auth(func):   # 把要执行的henan模块从这里传进来def inner(*args,**kwargs):#再定义一层函数if auth_type == "qq":_username = "alex" #假装这是DB里存的用户信息_password = "abc!23" #假装这是DB里存的用户信息global user_statusif user_status == False:username = raw_input("user:")password = raw_input("pasword:")if username == _username and password == _password:print("welcome login....")user_status = Trueelse:print("wrong username or password!")if user_status == True:return func(*args,**kwargs) # 看这里看这里,只要验证通过了,就调用相应功能else:print("only support qq ")return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数return auth@login("qq") #注意这里传入参数给装饰器外层
def henan(t):print "henan********,%s" %thenan("henan args")

运行结果

user:alex
pasword:abc!23
welcome login....
henan********,henan args

 

 

应用场景一:登录验证

优点:

  1、不会改变原先代码结构

  2、不会改变原先的调用方式

 

参考:http://www.cnblogs.com/alex3714/articles/5765046.html

转载于:https://www.cnblogs.com/kevincaptain/p/10442063.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从Java连接到Cassandra

在我的帖子Hello Cassandra中 ,我研究了如何下载Cassandra NoSQL数据库并使用cqlsh连接到Cassandra数据库。 在本文中,我将介绍从Java客户端连接到Cassandra数据库的基础知识。 尽管有几种可用于从Java访问Cassandra数据库的 框架 ,但我将在…

Django---Model操作

一、字段 1 AutoField(Field)2 - int自增列,必须填入参数 primary_keyTrue3 4 BigAutoField(AutoField)5 - bigint自增列,必须填入参数 primary_keyTrue6 7 注:当model中如果没有自增列,则自动会创建…

8. Action过滤

Action过滤原文: http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx1. 介绍一般Action与用户动作是一对一的关系,用户的某一个动作对应一个特定的Action.然而,有时你可能会希望在Action执行的前后执行指定的操作,MVC中可以通过Action过滤器来实现这个功能.A…

android运行时状态,Android 如何保存Android 运行时状态

Android 如何保存Android 运行时状态使用 SaveInstanceState去保存运行时数据首先,我们需要重写一下系统的public void onSaveInstanceState(Bundle savedInstanceState)方法并在onSaveInstanceState方法中添加需要保存的数据。最后我们可以在onRestoreInstanceStat…

程序文件分类及编写要求

一级:管理体系手册 由质量管理部负责编制,最高管理者批准后发布生效。举例如:XX公司管理手册 二级:管理体系程序文件 由各相关部门进行编写,质量管理部体系负责人审核通过各部门评审会签,由管理者代表批…

仿制药的美丽与陌生

最近,我正在为Oracle认证专家Java SE 7程序员考试做准备,而我恰巧在Java泛型领域遇到了一些看起来很奇怪的结构。 但是,我也看到了一些巧妙而优雅的代码。 我发现这些示例值得分享,这不仅是因为它们可以使您的设计选择更容易&…

C# 判断txt文件编码格式

/// <summary> /// 获取文件的编码格式 /// </summary> public class EncodingType{/// <summary> /// 给定文件的路径&#xff0c;读取文件的二进制数据&#xff0c;判断文件的编码类型 /// </summary> /// <param name“FILE_NAME“>文件路径&…

Vuex的第一次接触

前言&#xff1a;最近在做Vue实现去哪网&#xff0c;想要实现在城市列表页面&#xff0c;点击某个城市的时候&#xff0c;主页的头部的城市会随着改变&#xff0c;就是首页和城市页面有共用的数据要分享&#xff0c;这里使用Vuex 1. Vuex是什么&#xff1f; 是Vue官方推荐的数…

乐刻运动 app android,乐刻运动

乐刻运动是一款广受欢迎的运动健身软件&#xff0c;不论你是想打造完美身材还是减脂减重&#xff0c;乐刻运动都会为你制定严格而又科学的运动健身计划&#xff0c;相当于一个掌上私人的健身教练&#xff0c;时刻关注你的健身状况&#xff0c;快来下载试试吧。乐刻运动软件优势…

新的公司:Dendrite

开始新的学习 好好学好技术&#xff0c;为了未来.ganjuebucuo 转载于:https://www.cnblogs.com/xinhua327/articles/1188299.html

RK3288 mipi屏调试流程

CPU&#xff1a;RK3288 系统&#xff1a;Android 5.1 1、修改kernel/arch/arm/configs/rockchip_defconfig&#xff0c;打开mipi屏开关 # CONFIG_LCD_GENERAL is not set CONFIG_LCD_MIPIy CONFIG_RK_TRSMy # CONFIG_RK32_LVDS is not set # CONFIG_RK32_DP is not set # CONFI…

java IO流小结

Java流操作有关的类或接口&#xff1a; Java流类图结构&#xff1a; 流的概念和作用 流是一组有顺序的&#xff0c;有起点和终点的字节集合&#xff0c;是对数据传输的总称或抽象。即数据在两设备间的传输称为流&#xff0c;流的本质是数据传输&#xff0c;根据数据传输特性将流…

华为android是什么型号,华为手机机型众多,目前这几款最值得入手

华为手机机型众多&#xff0c;目前这几款最值得入手2020-09-22 15:00:033点赞0收藏0评论华为手机可以说是国家手机的代名词。受某种感情的影响&#xff0c;很多人都用华为取代了iPhone。为了表达感情&#xff0c;很多人也纷纷效仿&#xff0c;购买华为手机。但我想说的是支持华…

向Java添加@atomic操作

总览 原子操作如何在Java中工作&#xff0c;OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法。 反馈 在我以前的文章中&#xff0c; 对可变字段进行原子操作。 有人指出&#xff0c;无论好意如何&#xff0c;“修复”先前的行为都不太可能继续进行。 替代方法是添加…

JSP页面中使用超链接进行传输参数(参数是一个本地磁盘链接)问题

在使用COS组件进行文件上传下载时遇到一个下载问题 刚开始我存的地址格式为&#xff1a;D:\tool\upload发现一直报Error parsing HTTP request header Note: further occurrences of HTTP header p的错误 后来发现使用超链接传参数不支持“\”字符&#xff0c;可能是转义字符…

pt-online-schema-change VS oak-online-alter-table【转】

前言 在上篇文章中提到了MySQL 5.6 Online DDL&#xff0c;如果是MySQL 5.5的版本在DDL方面是要付出代价的&#xff0c;虽然已经有了Fast index Creation&#xff0c;但是在添加字段还是会锁表的&#xff0c;而且在添加删除辅助索引是会加S锁&#xff0c;也就是无法进行写操作。…

The Pilots Brothers' refrigerator

#include<iostream> #include<cstdio> #include<string> using namespace std; int mem[4][4];//用于储存翻转次数&#xff0c;如果是偶数&#xff0c;则相当于没有翻转int main(){char ch;for (int x 0; x<4; x){//按sample的顺序,x代表纵行,y是横列for…

Jax-RS自定义异常处理

使用JEE的好处之一是可用的组件确实是非常标准的。 在使用JAX-RS时&#xff0c;有时您需要控制如何处理异常并将其反馈给用户。 默认情况下&#xff0c;如果引发异常&#xff0c;您将得到一些可怕的HTTP 500内部服务器异常&#xff0c;从而暴露Web服务的内部故障。 考虑以下要…

开张大吉!

新工作&#xff0c;新技术&#xff0c;新开始&#xff01; 开这个博客&#xff0c;希望能记录自己在新公司的点点滴滴&#xff01; 转载于:https://www.cnblogs.com/newman78/archive/2008/05/14/1197227.html

html中评论应该怎么写,HTML-评论

HTML-评论注释是一段代码&#xff0c;任何网络浏览器都将忽略它。最好在HTML代码中添加注释&#xff0c;尤其是在复杂的文档中&#xff0c;以指示文档的各个部分&#xff0c;以及任何其他注释代码的人。注释可帮助您和其他人理解您的代码并提高代码的可读性。HTML注释位于标记之…