python装饰器实例-python装饰器案例
普通装饰器函数
计算函数的运行时间
import requests
import time
import re
# 黑名单
filter_urls = ['www.hao123.com', 'www.baidu.com', 'www.jd.com']
def filter_url(url): # 过滤url
print(url)
host = re.findall(r'http[s]?://(.*?)/', url)[0]
return host in filter_urls
# 测试网络请求的响应时间
def check_runtime(func):
print('--初始装饰--', func.__name__)
def wrapper(url, *args, **kwargs): # 闭包函数
# 判断url的 / path路径是否存在,如果不存在,则追加/
if url[7:].find('/') == -1 or url[8:].find('/') == -1:
url += '/'
if filter_url(url):
print('---已取消下载--:此url已在黑名单中')
return
# 获取开始请求的时间
start_time = time.time()
# result = func(*args, **kwargs)
result = func(url, *args, **kwargs)
delta_seconds = round(time.time() - start_time, 5)
print('[执行时间%.5f]' % delta_seconds)
return result
return wrapper # 返回一个包装函数(包装被装饰函数的参数列表)
@check_runtime
def request(url):
print('--开始请求--', url)
resp = requests.get(url)
print('--响应--', resp.status_code)
print(resp.content)
print('---完成请求---')
request('http://www.hao123.com')
带参数装饰器函数
带参数装饰器
设定权限(表) 8 查询(QUERY) 4 增加(ADD) 2 删除(DELETE) 1 修改(UPDATE) 0 无(NOSET)
设定角色——权限 admin 15(8421) | default, 8
设置用户-角色 disen: admin | cici: default
假如当前session中登录的用户是cici,其权限值为8
import time
current_rights = 8 # 当前登录用户的权限值
PERMISSION = (('QUERY', 8), ('ADD', 4), ('DELETE', 2), ('UPDATE', 1), ('NOSET', 0))
def get_permission(permission): # 根据权限名,返回权限值
for item in PERMISSION:
if permission in item:
return item[1]
def check_permission(permission):
print('--验证权限--', permission)
def wrapper1(func):
print('--初始化装饰函数--')
def wrapper2(*args, **kwargs):
# 检查当前用户的权限
permission_value = get_permission(permission)
# print(permission_value)
if current_rights & permission_value != permission_value:
print('当前用户没有权限')
return
result = func(*args, **kwargs)
return result
return wrapper2
return wrapper1
@check_permission('DELETE')
def delete_order(id):
print('当前用户 cici 正在删除订单:', id)
time.sleep(2)
print('删除成功!')
def add_permission(permission): # 添加权限
global current_rights
current_rights |= get_permission(permission)
# add_permission('DELETE')
delete_order(1010111)
不带参数的装饰器类
class Check():
def __init__(self, func):
self.func = func
def __call__(self, *args):
self.func(*args)
@Check
def login(uid):
print(uid)
被装饰的方法会传递给装饰器的构造器(__init__),然后在被装饰的函数被调用的时候,装饰器的__call__()方法就会执行
注意: 在装饰阶段,__init__ 函数执行,在被装饰的方法被调用的时候,__call__ 执行
带参数的装饰器类
class Check():
def __init__(self, name):
self.name = name
def __call__(self, func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@Check('log')
def login(uid):
print(uid)
__call__()会在装饰阶段被调用
带参数装饰器实现爬虫超时处理
import time
import requests
RETRY_TIME = 3
DOWNLOAD_DELAY = 2
class Retry(object):
def __init__(self,retries = 3,delay=0):
self.retries = retries
self.delay=delay
def __call__(self,func):
def wrapper(*args, **kwargs):
for i in range(self.retries):
try:
result=func(*args,**kwargs)
except Exception as e:
print(e)
time.sleep(self.delay)
continue
else:
return result
return wrapper
@Retry(RETRY_TIME,DOWNLOAD_DELAY)
def fetch(url):
print(f'Start fetch {url}')
resp = requests.get(url,timeout=5)
print(resp.status_code)
fetch('http://www.baidu.com')
python装饰器实例-python装饰器案例相关推荐
- python装饰器实例-python装饰器实例大详解
原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...
- python装饰器实例-Python装饰器原理与简单用法实例分析
本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...
- python装饰器实例-Python装饰器用法实例总结
本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能, ...
- python装饰器实例-Python函数装饰器--实例讲解
一.装饰器定义: 1.装饰器的本质为函数: 2.装饰器是用来完成被修饰函数的附加功能的 所以:装饰器是用来完成被修饰函数附属功能的函数 装饰器的要求: 1.不能修改被修饰函数的源代码: 2.不能更改被 ...
- python装饰器实例-Python装饰器实用例子
Python里我们经常能见到@开头的句法,也就是人们常说的装饰器(decorator).装饰器是Python非常重要的一部分,能够产出更易于维护的代码.这篇文章会给大家带来装饰器的介绍以及几个实用的例 ...
- python装饰器实例-Python装饰器简单用法实例小结
本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...
- python项目开发实例-Python项目案例开发从入门到实战——爬虫、游戏
资料简介: 本书以Python 3.5为编程环境,从基本的程序设计思想入手,逐步展开Python语言教学,是一本面向广大编程学习者的程序设计类图书.本书以案例带动知识点的讲解,将Python知识点分解 ...
- python数据分析可视化实例-Python数据分析与可视化从入门到精通
(1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果.(2)专注于Python数据分析与可视化操作中实际用到的技术.相比大而全的书籍资料,本书能让读者尽快上手,开始项目 ...
- python简单程序实例-python简单项目实例
语言多元化是PayPal编程文化中一个重要的组成部分.在C++和Java长期流行的同时,更多的团队选择了Jva和Scala.同时,Braintree的收购也引入了一个久经世故的Ruby社区.Pytho ...
- python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)
本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...
最新文章
- 算法 - 交换排序(C++)
- git merge --squash改写提交
- VTK:Utilities之KnownLengthArray
- css 选择href属性值,巧用CSS属性值正则匹配选择器(小技巧)
- readyState属性和status属性
- webpack源码分析(2)---- webpack\bin\webpack.js
- VMware Workstation 与 Server 的区别
- mysql 瓶颈诊断_MySQL 监控、性能瓶颈排查
- 关于ArcGIS Mobile回传数据中常遇到的问题整理!
- 阿里巴巴正式上线全球首个数据中心Open Channel SSD产品
- css中hack是什么
- 关于rem自适应的一点研究
- java开源打印控件_这个WEB打印控件略牛逼,还免费
- 桥本分数式c语言,《算法设计与分析教案(新格式)》.doc
- 【JY】橡胶支座的简述和其力学性能计算
- 09年国内外免费杀毒软件大收罗
- 线性高电压稳压器的制作
- 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (2/3)
- 图像处理用什么神经网络,神经网络图像处理
- 【自然语言处理】【ChatGPT系列】大模型的涌现能力
热门文章
- java报表工具FineReport使用中遇到的常见报错及解决办法(三)
- 基于RTP的h.264视频传输系统(二)
- 希望控件【解决】mfc grid control问题:无水平滚动条(scrollbar)、垂直滚动条只有向上部分、向下部分看不到...
- 微软企业库4.1学习笔记(六)创建对象
- ListView用法
- 资深专家给.NET初学者的学习建议(转)
- 表格边框重复合并属性: border-collapse:collapse;
- 2016-2017 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2016)
- MySQL 5.6.6 LABS 版本 下载 已经内含 Memcached
- Best jQuery Plugins of 2010