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 ...
随机推荐
- Webstorm设置代码提示
下载路径: https://github.com/virtoolswebplayer/ReactNative-LiveTemplate 本插件可以配合Webstorm设置代码提示. Mac下安装 We ...
- html中的居中问题
1.表格居中:<table>标签的align属性 <table align="center">...... </table> 2.表格内容居中; ...
- BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1747 Solved: 876[Submit][Status][Discuss] Descripti ...
- mysql 配置安装
1. 下载: mysql-5.7.20是解压版免安装的,mysql-5.7.20下载地址:http://dev.mysql.com/downloads/mysql/ 直接下载,无需注册和登录. ...
- ubuntu查找端口和kill
查看 : netstat -anp | grep 8080 结束: kill -9 进程号
- 【补】英语对IT工作者的重要性
浅谈程序员的英语学习 作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪.但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的.英语对于程序员十 ...
- Action与Func 用法
//vs2017 + framework4.6.2 //zip https://github.com/chxl800/ActionFuncDemo //源文件git https://gith ...
- angular2路由之routerLinkActive指令
angular2的routerLinkActive指令在路由激活时添加样式class .red{ color: red;} <a routerLink="/user/login ...
- 关于mysql 8.0.13zip包安装
mysql 8.0.13默认有一个data文件夹,这个文件夹得删了,不然安装服务时候会有日志文件提示报错: Failed to find valid data directory. Data Dict ...
- 2018南京网络赛L题:Magical Girl Haze(最短路分层图)
题目链接:https://nanti.jisuanke.com/t/31001 解题心得: 一个BZOJ的原题,之前就写过博客了. 原题地址:https://www.lydsy.com/JudgeOn ...