装饰器

#1、开放封闭原则:对扩展开放,对修改是封闭
#2、装饰器:装饰它人的,器指的是任意可调用对象,现在的场景装饰器-》函数,被装饰的对象也是-》函数
#原则:1、不修改被装饰对象的源代码 2、不修改被装饰对象的调用方式
#装饰器的目的:在遵循1,2的前提下为被装饰对象添加上新功能

(1)无参数类型

import time
def outer(func):def inner():time.sleep(1)print("hello")func()return inner

def bar():print('world')

(2)有参数类型

# 有参装饰器
import timedef auth2(engine='file'):def auth(func): # func=indexdef inner(*args,**kwargs):if engine == 'file':name=input('name>>: ').strip()password=input('password>>: ').strip()if name == 'egon' and password == '123':print('login successful')return func(*args,**kwargs)else:print('login err')elif engine == 'mysql':print('mysql auth')elif engine == 'ldap':print('ldap auth')else:print('engin not exists')return innerreturn auth@auth2(engine='mysql') #@auth #index=auth(index) #index=inner
def index(name):time.sleep(1)print('welecome %s to index' %name)return 1111res=index('egon') #res=inner('egon')
print(res)

(3)并列装饰器

import time
def timmer(func):def inner(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print('run time is %s' %(stop-start))return resreturn innerdef auth2(engine='file'):def auth(func): # func=indexdef inner(*args,**kwargs):    # 一致if engine == 'file':name=input('name>>: ').strip()password=input('password>>: ').strip()if name == 'egon' and password == '123':print('login successful')res = func(*args,**kwargs) #一致return reselse:print('login err')elif engine == 'mysql':print('mysql auth')elif engine == 'ldap':print('ldap auth')else:print('engin not exists')return innerreturn auth@auth2(engine='file')
@timmer
def index(name):time.sleep(1)print('welecome %s to index' %name)return 1111res=index('egon')
print(res)

(4)

from functools import wraps
import time
def timmer(func):@wraps(func)def inner(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print('run time is %s' %(stop-start))return res# inner.__doc__=func.__doc__# inner.__name__=func.__name__return inner@timmer
def index(name): #index=inner'''index 函数。。。。。'''time.sleep(1)print('welecome %s to index' %name)return 1111res=index('egon')
print(res)print(help(index))

转载于:https://www.cnblogs.com/taozizainali/p/8202361.html

python 阿狸的进阶之路(4)相关推荐

  1. Python 终极指南:进阶之路

    如果你对数据科学.Web 开发.机器人或物联网感兴趣,那你一定要学 Python.由于 Python 被大量使用和广泛应用,它已经成为了增长最快的编程语言. 对于一个初学者或没有技术背景的人来说,学习 ...

  2. python flag用法_Python 进阶之路 (四) 先立Flag, 社区最全的Set用法集锦

    Set是什么 大家好,恰逢初五迎财神,先预祝大家新年财源滚滚!! 在上一期详解tuple元组的用法后,今天我们来看Python里面最后一种常见的数据类型:集合(Set) 与dict类似,set也是一组 ...

  3. [转]工程师进阶之路(三)

    2019独角兽企业重金招聘Python工程师标准>>> 工程师进阶之路 三 再谈沟通的策略 什么叫做策略,我的认识就是做事情的方法,有些时候光有很好的原则,而没有好的方法也是不行的. ...

  4. python处理pdf实例_Python实战-从菜鸟到大牛的进阶之路pdf_Python教程

    资源名称:Python实战-从菜鸟到大牛的进阶之路 pdf 第1章 Python 处理 cassandra 升级后的回滚脚本 第 2 章 多套方案来提高 python web 框架的并发处理能力 第 ...

  5. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...

  6. Python 进阶之路 (十二) 尾声即是开始

    Python进阶之路总结 大家好,我的<< Python进阶之路>>到这一期就到此为止了,和 <<Python 基础起步>>不同,在掌握了一些基础知识后 ...

  7. Python 进阶之路 (八) 最用心的推导式详解 (附简单实战及源码)

    什么是推导式 大家好,今天为大家带来问我最喜欢的Python推导式使用指南,让我们先来看看定义~ 推导式(comprehensions)是Python的一种独有特性,推导式是可以从一个数据序列构建另一 ...

  8. python英译汉库模块_Python 进阶之路-翻译模块

    Python 进阶之路-翻译模块 作者:nango  阅读:1749次  来源:原创  时间:2017-07-14 17:09 Git 地址 [python 翻译模块](https://github. ...

  9. python职业发展规划-Python开发者的四大进阶攻略,菜鸟的成神之路

    原标题:Python开发者的四大进阶攻略,菜鸟的成神之路 随着人工智能的发展与应用,Python编程语言受到世界各界人士的关注,编程圈金句从"人生苦短,我学Python"转变成了& ...

最新文章

  1. AI一分钟 | 微软将成立微软亚洲研究院上海分院;阿里AI鉴黄师能判别呻吟声
  2. linux自动下载ftp文件夹,Linux 下FTP定时执行批量下载文件
  3. Go简单的Goroutine示例
  4. bzoj1016 [JSOI2008]最小生成树计数
  5. 列赋值为列表_Pandas入门-3-新增数据列操作
  6. div css网页设计源代码_HTML+CSS网页设计,企业网站服务项目布局样式
  7. node-webki 基本程序结构
  8. 东航期货行情接口和交易接口(20190509)
  9. VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——VoiceRecorder控件的使用方式.Net移动开发...
  10. docker search oracle,Docker search 命令
  11. 简单的整人代码(你是猪,文章末附带文件)
  12. QIIME 2教程. 22命令行界面q2cli(2021.2)
  13. python做估值模型_理解债券估值中的摊销/摊余成本,利用EXCEL+Python估值建模
  14. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57,A72
  15. 【NLP】Representation Learning for Natural Language Processing
  16. Unity 2D骨骼动画2:创建真实动画
  17. Office2007页眉有横线
  18. Cheat Enginee(CE)对扫雷中部分属性的内存地址寻找以及修改~逆向分析
  19. 那些年我们在python掉进的坑系列之一pandas的to_sql
  20. Delphi断线重连线程

热门文章

  1. python跨目录调用_python 跨目录访问文件
  2. linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置
  3. iOS手势操作简介(四)
  4. 【网络安全】关于ARP攻击的原理以及在Kali Linux环境下的实现
  5. QT+VS中使用qDebbug()打印调试信息无法显示
  6. [POI2007]MEG-Megalopolis
  7. poj3713 Transferring Sylla 枚举+tarjan判割点
  8. TP3.2设置URL伪静态满足更好的SEO效果
  9. jmeter 非gui 模式跑jmx
  10. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的解决方案...