python函数学习之装饰器
装饰器
装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能。装饰器的返回值也是一个函数对象。
分类:
1、不带参数的装饰器函数:
def wrapper(f): #装饰器
def inner():
'''执行函数之前要做的'''
print('葫芦娃葫芦娃,一根藤上七个娃。')
ret = f()
'''执行函数之后要做的'''
print('风吹雨打都不怕,啦啦啦啦~')
return ret
return inner @wrapper #语法糖 @wrapper 相当于 func = wrapper(func)
def func(*args,**kwargs):
print("澳门顶级赌场上线啦,性感荷官在线发牌,让您嗨翻天~") func() #func() = inner() 调用装饰器 计算结果:
葫芦娃葫芦娃,一根藤上七个娃。
澳门顶级赌场上线啦,性感荷官在线发牌,让您嗨翻天~
风吹雨打都不怕,啦啦啦啦~
其中wrapper()就是装饰器函数,func()为被装饰函数,被装饰之后func()可以实现inner中的一部分功能。
2、带参数的装饰器函数:
def timer(func):
def inner(*args,**kwargs):
print("大头儿子小头爸爸,一对好朋友快乐父子俩。")
ret = func(*args,**kwargs)
print("儿子的头大手儿很小,爸爸的头小手儿很大。")
return ret
return inner
@timer
def func(name):
print("%s是隔壁王叔叔"%name)
func("王文劲")
计算结果:
大头儿子小头爸爸,一对好朋友快乐父子俩。
王文劲是隔壁王叔叔
儿子的头大手儿很小,爸爸的头小手儿很大。
原则:开放封闭原则 1、开放:对拓展是开放的,可以添加新功能(装饰器) 2、封闭:对修改是封闭的,不能轻易修改以前的代码
应用:用户登录检测
运用——登录检测:
user,pw='jaye','88888888'
login_status = False
def login():
if login_status == False:
if auth_type =="jingdong"
username = input()
password = input()
if user == username and pw == password:
print('welcome to moubao store')
home()
login_status = True
elif auth_type =="weixin"
...
else:
pass
@login(auth_type = 'jingodng')
def home():
print('welcome to home page')
@login(auth_type = 'weixin')
def finance():
print('welcome to home page')
@login(auth_type = 'jingodng')
def book():
print('welcome to home page')
python函数学习之装饰器的更多相关文章
- python函数与方法装饰器
之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...
- Python函数篇:装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...
- python函数:叠加装饰器、迭代器、自定义迭代器、生成式
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...
- python 函数基础及装饰器
没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2&qu ...
- python学习-42 装饰器 --- 函数闭包1
函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...
- Python学习 :装饰器
装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...
- python笔记5:装饰器、内置函数、json
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- python基础之函数当中的装饰器
在实际工作当中存在一个开放封闭原则 1.对扩展是开放的 为什么要对扩展开放呢? 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...
- Python学习笔记: 装饰器Decorator
介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...
随机推荐
- oracle 之分析函数 over (partition by ...order by ...)
一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 1.分析函数和聚合函数的 ...
- AFNetworking 打印错误信息(二进制信息)
AFNetworking 打印错误信息(二进制信息) NSError *underError = error.userInfo[@"NSUnderlyingError"]; NSD ...
- CSS、JavaScript学习过程
初学JavaScript,通过博客记录自己学习过程中遇到的问题.(包含少量CSS) 零碎记录 JavaScript 输出 type="text/javascript" 那些老旧的实 ...
- 用VMWare搭建服务器集群不能上外网的三种模式下对应解决办法
前言 决心要花费宝贵时间写下这篇心得,是因为从昨天晚上到今天上午被这个VMWare模拟搭建的服务器集群不能上外网的问题搞得很心烦,最后决定跟它杠上了!上午还通过远程连接得到了“空白”同学的帮助,在此表 ...
- Cobbler实现自动化安装(下)--实现过程
实验环境 [root@cobbler ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@cobbler ~] ...
- MySQL---视图、触发器
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...
- 启动pip时,< Fatal error in launcher: Unable to create process using '"' >问题的原因及解决方法
根本原因 要启动的pip程序,中指定的python程序路径不对 实例分析 我的window电脑上同时安装了python2.7和python3.6,他们的安装路径如下图: 注意图python2.7中红线 ...
- 端午节佳节从CSDN博客搬家来这,请多多指教
端午节佳节从CSDN博客搬家来博客园,请多多指教
- PHP的高效率写法
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静态方法的 ...
- linux3.4.2之DMA驱动完整程序
/* *参考arch/arm/mach-s3c24xx/dma-s3c2410.c */ #include <linux/module.h> #include <linux/kern ...