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 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
随机推荐
- windows下python2和python3同时安装ipython
1.ipython简介: IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许 ...
- 知识点-jar包
JAR文件的全称是Java Archive File,意思就是Java档案文件.通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,同城也被称为JAR包.JAR文件与zip文件的去区别就是在JA ...
- linux达人养成计划
一.命令基本格式: ls -1 详细列表 (ll) -h 人性化显示文件大小 -a 显示所有文件,包括隐藏文件 -d 查看目录属性 -i 显示iNode 二.文件处理命令 mkdir -p [目录名] ...
- 第三章: web界面操作
3.1 zabbix的web安装 3.1.1 使用浏览器访问 http://10.0.0.61/zabbix/setup.php 在检测信息时,可查看具体的报错信息进行不同的解决 选择mysql数据库 ...
- centos7 使用二进制安装mysql 5.7.23
1.下载二进制安装包 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz cd /usr/local/src wget https://cdn.mysql.com// ...
- OpenCV安装教程(Ubuntu 18.04)
视频教程 带字幕版: https://www.youtube.com/watch?v=0vjC2UHptU4 无带字幕版:https://fzhshared-1252154746.cos.ap-gua ...
- 第9章 应用层(5)_文件传输协议FTP
6. 文件传输协议FTP 6.1 FTP主动和被动模式 (1)FTP协议 ①与其他协议不同,FTP协议在客户端访问FTP服务器时需要建立两个TCP连接.一个用来传输FTP命令,一个用来传输数据. ②在 ...
- courator - create
0. retry policy RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,3); 1. client 1) recipes ...
- Ramdisk虚拟内存盘,Swap分区
虚拟内存盘是通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术.相对于直接的硬盘文件访问来说,这种技术可以极大的提高在其上进行的文件访问的速度.但是RAM的易失性也意味着当关闭电源后这部分数据将 ...
- 用socket发送信息在浏览器上显示出来
服务端代码: import socket def main(): sock=socket.socket() sock.bind(('localhost',8089)) sock.listen(5) w ...