python装饰器的学习笔记
此博文是我对装饰器的一些理解,如果有错误欢迎及时留言,我会第一时间向大家学习。
一、什么是装饰器
1、从字面意义来看:
是用来给函数装饰打扮的函数
2、理论上可以理解为:
(1)、不改变函数的运行方式
(2)、不改变函数体内容的情况下给函数添加新的功能
3、装饰器的结构:
装饰器=高阶函数+函数嵌套+闭包
二、装饰器的种类
下面就利用两个例子来实现一下带参装饰器和不带参装饰器使用。
1、不带参数的装饰器
user ={'name':'test','passwd':''}
user_status = {'name':None,'login':False}
def auth_func(func):
def warper(*args,**kwargs):
if user_status['name'] and user_status['login']:
res = func(*args,**kwargs)
return res
name = input("username: ")
passwd = input("password: ")
if user['name'] == name and user['passwd'] == passwd:
user_status['name'] = name
user_status['login'] = True
res = func(*args,**kwargs)
return res
else:
print("用户名或密码错误")
return warper
@auth_func
def index(name):
print("欢迎%s 来到主页" % name)
@auth_func
def home(name):
print("我在home下")
index("test")
home('test')
#输出
username: test
password: 123
欢迎test 来到主页
我在home下
2、带参数的装饰器
auth_user_dict ={'username':None,'password':False}
def load_fileBD():
with open("userDB",'r') as f:
return f.read()
def auth(auth_type = 'file'):
def auth_func(func):
def wraper(*args,**kwargs):
if auth_type == 'file':
fild_data = load_fileBD()
fild_data = eval(fild_data)
if auth_user_dict['username'] and auth_user_dict['password']:
res = func(*args,**kwargs)
return res
username = input('username: ')
passwd = input('password: ')
for user_info in fild_data:
if username == user_info['username'] and passwd == user_info['password']:
auth_user_dict['username'] = username
auth_user_dict['password'] = passwd
res = func(*args,**kwargs)
return res
else:
print("用户名密码错误")
elif auth_type == 'mysql':
print("从mysql中读取用户并验证,以print代表执行验证")
res = func(*args,**kwargs)
return res
else:
print("没有这种类型的数据库")
return wraper
return auth_func
@auth('mysql')
def home(name):
print("%s is login in home" % name)
home('test')
#输出
从mysql中读取用户并验证,以print代表执行验证
test is login in home
python装饰器的学习笔记的更多相关文章
- Python装饰器模式学习总结
装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...
- python 装饰器初步学习
第一步 简单函数 ''' 简单的函数:调用两次''' def myfunc(): print ('myfunc() called.') myfunc() myfunc() 第二步 装饰器为调用函数提供 ...
- Python 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- (转载)Python装饰器学习
转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...
- Python装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...
- 【转】九步学习python装饰器
本篇日志来自:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 纯转,只字未改.只是为了学习一下装饰器.其实现在也是没有太看明白 ...
- Python学习:11.Python装饰器讲解(二)
回顾 上一节我们进行了Python简单装饰器的讲解,但是python的装饰器还有一部分高级的使用方式,这一节就针对python装饰器高级部分进行讲解. 为一个函数添加多个装饰器 今天,老板又交给你一个 ...
- python 装饰器学习(decorator)
最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...
随机推荐
- Atitit.增强系统稳定性----虚拟内存的设置
Atitit.增强系统稳定性----虚拟内存的设置 1.1. 读取虚拟内存配置1 1.2. 禁止虚拟内存1 1.3. 默认所有驱动器虚拟内存1 1.4. 设置c d盘虚拟内存为系统管理1 1.5. 设 ...
- 陷阱:C++模块之间的”直接依赖“和”间接依赖“与Makefile的撰写
参考:http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ 参考:http://stackoverflow ...
- asp.net出现的异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值" 的解决方法
引用: https://support.microsoft.com/zh-cn/kb/312629 症状 如果您使用的Response.End. Response.Redirect或Server.Tr ...
- linux学习笔记15--命令locater、slocate
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...
- 跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例
先在数据库当中创建以下数据: mysql> create table user( -> id int not null auto_increment, ) not null default ...
- jQuery 时间戳转化成时间
//时间转换 function formatDate(now) { var now= new Date(now); var year=now.getFullYear(); ...
- Unity3D 5中增加WebGL 播放插件
http://www.csdn.net/article/2014-03-18/2818822-Unity-5-game-engine 其实我是搞3d的,这篇文章里所有的术语看了都有很强的亲切感. Un ...
- Meter and pixel units in a box2d game - LibGDX
http://pimentoso.blogspot.com/2013/01/meter-and-pixel-units-in-box2d-game.html 需FQ ————————————————— ...
- 什么是 Web?
Web这个词刚开始显得有些泛泛,似乎“冲浪”.“网上存在”以及“主页”等等都和它拉上了一些关系. 甚至还有一种“Internet 综合症”的说法,对许多人狂热的上网行为提出了质疑.我们在这里有必要作一 ...
- Windows Server2008R2中导入Excel
使用Microsoft.ACE.OLEDB对Excel进行操作: string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + & ...