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 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
随机推荐
- vue之v-model
上一篇文章总结了v-bind的用法,我们发现v-bind实现了数据的单向绑定,将vue实例中的数据同元素属性值进行绑定,今天我们将总结vue中的数据双向绑定v-model. v-model实现双向绑定 ...
- [转][C#]WebAPI 必需 Dll
- elastic-job 新手指南&官网指南
elastic-job 新手指南 Elastic-Job——分布式定时任务框架 官网帮助文档
- 基于Html的SEO(很基础,更是前端必须掌握之点)
文章来源:百度文库 Html代码seo优化最佳布局,实例讲解 众所周知,搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. ...
- 如何在eclipse 里面调试java.lang包的代码
1. 在Eclipse中,Window->Preferences->Java->Compiler,确保以下选项都勾选上 2. 在Eclipse中,Window->Prefer ...
- arduino mega 避障报距小车
流程图 硬件 mega2560 // Pin 13 has an LED connected on most Arduino boards. // give it a name: #include&l ...
- 将.ipynb文件导入到另外的文件中
在定义函数或者类的.ipyter文件的末尾加上 try: !jupyter nbconvert --to python ppp.ipynb #ppp是文件的名称 except: pass 在需要导入到 ...
- linux下新建(touch)\复制(cp)\剪切(mv)\删除(rm)文件
touch :新建多个文件,中间用空格隔开 touch file1 file2 cp: mv:剪切 rm:删除文件
- Sep 10th 2018
今天是教师节,祝家里的两位‘老师’节日快乐.一位是幼儿园的保健医,另一位是驾校的教练.不能说是真正的老师,但作的也是传道授业之工作.今天看到新闻,马云要在明年的今天辞去现任阿里巴巴主席一职,继续投身他 ...
- 第9章 应用层(4)_超文本传输协议HTTP
5. 超文本传输协议HTTP 5.1 统一资源定位符URL (1)URL的一般形式:<协议>://<主机>:<端口>/<路径> ①协议后面必须写上“:/ ...