python 修改的函数装饰器
把好的代码记录下来 方便以后学习
修改的函数参数装饰器
from functools import wraps
import time
import logging
def warn(timeout):
#timeout=[timeout] python 2.x
def decorator(func):
def wrapper(*args,**kargs):
start = time.time()
res = func(*args,**kargs)
used = time.time()-start
#if(used > timeout[0]): python 2.x
if(used > timeout):
msg = '"%s":"%s" > %s' % (func.__name__,used,timeout)
logging.warn(msg)
return res
def setTimeOut(k):
nonlocal timeout
timeout = k
#timeout[0] = k python 2.x
wrapper.setTimeOut = setTimeOut
return wrapper
return decorator from random import randint
@warn(1.5)
def test():
print('in test')
while randint(0,1):
time.sleep(0.5) for _ in range(30):
test()
test.setTimeOut(1)
for _ in range(30):
test()
检测带参数类型的函数装饰器
from inspect import signature
def typeassert(*ty_args,**ty_kargs):
def decorator(func):
sig = signature(func)
btypes = sig.bind_partial(*ty_args,**ty_kargs).arguments
def wrapper(*args,**kargs):
for name,obj in sig.bind_partial(*args,**kargs).arguments.items():
if name in btypes:
if not isinstance(obj,btypes[name]):
raise TypeError("%s must be %s" % (name,btypes))
return func(*args,**kargs)
return wrapper
return decorator @typeassert(int,str,list)
def f(a,b,c):
print(a,b,c) f(1,'abc',[1,2,3])
f(1,2,[1,2,3])
python 修改的函数装饰器的更多相关文章
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- python二 总结--函数-- 装饰器
装饰器是什么? 有什么用? 为什么要用? 真的有用吗? 1.装饰器: 装饰器: 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能. 原则:1.不能修改被装饰的函数的源代码 ...
- python语法基础-函数-装饰器-长期维护
######################################################### # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 ...
- Python中的@函数装饰器到底是什么?
在解释@函数装饰器之前,先说一下,类中的类方法和静态方法. 在Python中完全支持定义类方法.静态方法.这两种方法很相似,Python它们都使用类来调用(ps:用对象调用也可以). 区别在于:Pyt ...
- python 进阶篇 函数装饰器和类装饰器
函数装饰器 简单装饰器 def my_decorator(func): def wrapper(): print('wrapper of decorator') func() return wrapp ...
- Python作用域-->闭包函数-->装饰器
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部 ...
- Python进阶-III 函数装饰器(Wrapper)
1.引入场景: 检查代码的运行时间 import time def func(): start = time.time() time.sleep(0.12) print('看看我运行了多长时间!') ...
- Decorator——Python初级函数装饰器
最近想整一整数据分析,在看一本关于数据分析的书中提到了(1)if __name__ == '__main__' (2)列表解析式 (3)装饰器. 先简单描述一下前两点,再详细解说Python初级的函数 ...
- Python带参数的装饰器
在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passi ...
随机推荐
- (转)SQLServer_十步优化SQL Server中的数据访问一
原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第一步:应用正确的索引 我之所以先从索引谈起是因为采用正确的索引会使生 ...
- idea springboot 父子工程 子工程maven不自动import
父工程删除对spring boot启动项的引用,因为父工程 dependencyManagement,它不会自动加载包,只指定包的版本, 如果在父工程中引用了包,但是没有指定包版本,子工程将不会识别到 ...
- linux ubuntu生成pac文件,实现代理
sudo pip install genpac sudo pip install --upgrade genpac sudo genpac --proxy="SOCKS5 127.0.0.1 ...
- java封装的概念学习笔记
继承.封装.多态.抽象是面向对象编程的四大基本概念,其中封装装为重要,因为从我们学习JAVA开始,就基本上接触了封装,因为JAVA中的所有程序都是写在类中的,类也能当做一种封装. 在面向对象中封装 ...
- vue学习好文连接
1.什么是虚拟dom(VNode)? https://github.com/answershuto/learnVue/blob/master/docs/VNode%E8%8A%82%E7%82%B9. ...
- resttemlate
package com.xjj; import java.util.List; import java.util.Map; import java.util.stream.Collectors; im ...
- RestTemplate invoke JSON and convert to Object
@Test public void webTest() throws JsonProcessingException { Map<String, String> a = new HashM ...
- 【机器学习_9】sklearn
背景 机器学习的重头戏就在sklearn,里面包含各种机器学习算法.希望尽量通过便易上手的方式掌握这个库. 资料 官网--随时查 https://scikit-learn.org/stable/ sk ...
- Docker笔记——Docker安装及制作镜像
1 Docker安装本文中Docker运行环境为Ubuntu 14.04.1 LTS 3.13.0-32-generic x64参考:https://docs.docker.com/v1.11/eng ...
- zabbix使用SNMPV3协议监控交换机
SNMPV3是简单网络管理协议的第三版,因为其安全性更高,现在的中低端交换机已普遍支持该协议,所以在生产环境中我们应该采用SNMPV3对交换机.路由器进行管理. 首先在交换机上要配置SNMPV3协议, ...