python 阿狸的进阶之路(4)
装饰器
#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 time def auth2(engine='file'):
def auth(func): # func=index
def inner(*args,**kwargs):
if engine == 'file':
name=input('name>>: ').strip()
password=input('password>>: ').strip()
if name == 'egon' and password == '':
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 inner
return auth @auth2(engine='mysql') #@auth #index=auth(index) #index=inner
def index(name):
time.sleep(1)
print('welecome %s to index' %name)
return 1111 res=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 res
return inner def auth2(engine='file'):
def auth(func): # func=index
def inner(*args,**kwargs): # 一致
if engine == 'file':
name=input('name>>: ').strip()
password=input('password>>: ').strip()
if name == 'egon' and password == '':
print('login successful')
res = func(*args,**kwargs) #一致
return res
else:
print('login err')
elif engine == 'mysql':
print('mysql auth')
elif engine == 'ldap':
print('ldap auth')
else:
print('engin not exists')
return inner
return auth @auth2(engine='file')
@timmer
def index(name):
time.sleep(1)
print('welecome %s to index' %name)
return 1111 res=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 1111 res=index('egon')
print(res) print(help(index))
python 阿狸的进阶之路(4)的更多相关文章
- python 阿狸的进阶之路(9)
tcp传输: 传输需要ack回应,然后才清空缓存,服务端先起来. tcp流式协议,tcp的Nagle的优化算法,会将时间间隔短,数据量小的打包成一个,然后发送给对方,减少发送的次数. UDP协议: 不 ...
- python 阿狸的进阶之路(6)
常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...
- python 阿狸的进阶之路(5)
一.模块 1.什么是模块: 包含了一组功能的python文件,文件名是xxx.py,模块名是module. 可以使用 import module,四个通用的类别: (1)用python编写的py文件 ...
- day3 python 阿狸的进阶之路
函数概念: 1.为什要有函数 组织结构不清晰,可读性差,代码冗余,可扩展性差. 2.什么是函数 具备某一个功能的工具--->函数 事先准备工具->函数的定义 拿来就用. ...
- python 阿狸的进阶之路(8)
异常处理 http://www.cnblogs.com/linhaifeng/articles/6232220.html(转) 网络编程socket http://www.cnblogs.com/li ...
- python 阿狸的进阶之路(7)
面向对象 转自林海峰的博客 http://www.cnblogs.com/linhaifeng/articles/6182264.html 面向对象的理解: 将数据分类,比如学生类.数据有关的函数, ...
- Python 从入门到进阶之路(一)
人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...
- Python 从入门到进阶之路(七)
之前的文章我们简单介绍了一下 Python 中异常处理,本篇文章我们来看一下 Python 中 is 和 == 的区别及深拷贝和浅拷贝. 我们先来看一下在 Python 中的双等号 == . == 是 ...
- Python 从入门到进阶之路(六)
之前的文章我们简单介绍了一下 Python 的面向对象,本篇文章我们来看一下 Python 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
随机推荐
- MATLAB在三维坐标中显示图片 并 使得图片部分透明
要画一个光路图,本来可以用proe,但是鼠标不好用,有些操作也忘了,用MATLAB画了个.下面是用到的图片. 但是三维坐标中显示彩色图片的目标没有搞定,做了个灰度图,然后用仿射程序将彩色图片贴到了二维 ...
- Zabbix 调整告警发送的内容格式
在配置动作区域 可以设置报警内容格式进行调整 原先告警内容 修改内容为: 后显示效果
- shell命令输出
在shell脚本中的打印输出通常会有echo和printf两种,前者会自动换行. 一.echo Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出.您可以使用ech ...
- [UE4]认识CanvasPanelSlot,Construct Object From Class动态创建UI控件
Canvas Panel Slot是UserWidget的Canvas Panel组件容器内的组件特有的属性. 只有放置在Canvas Panel容器内才会有Canvas Panel Slot属性 可 ...
- 解决DevExpress10.2.4版本在VS2012工具箱控件不显示的问题
DevExpress10.2.4支持vs2010,安装vs2010或找一台装有vs2010的机器安装DevExpress10.2.4 执行DevExpress10.2.4的工具ToolboxCreat ...
- AD中组的概念
- java运行原理剖析
java是一种编译型语言,我们开发好的代码是不能够直接运行的,需要我们程序员进行编译之后,将字节点文件载入jvm虚拟之后,才可以运行操作 其原理是 java源代码-------编译-------> ...
- 在django中,执行原始sql语句
extra()方法 结果集修改器,一种提供额外查询参数的机制 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where ...
- Apache服务器下phalcon项目报Mod-Rewrite is not enabled问题
问题如图: 项目已经按照官网的教程修改了.htaccess文件,仍旧报此错误,判断可能是apache未添加mod_rewrite,通过查询资料,经以下两步解决此问题: 1.执行sudo a2enmod ...
- 《C++数据结构-快速拾遗》 树结构
1.简单的二叉树结构 #include <iostream> using namespace std; typedef int DATA; //建立二叉树的简单结构 typedef str ...