python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
2017-01-30 08:37
951 查看
9-4 如何实现属性可修改的函数装饰器
解决方案:
python3 nolocal
为包裹函数添加一个函数,用来修改闭包中使用的自由变量.
python中,使用nonlocal访问嵌套作用域中的变量引用,或者在python2中列表方式,这样就不会在函数本地新建一个局部变量
解决方案:
python3 nolocal
为包裹函数添加一个函数,用来修改闭包中使用的自由变量.
python中,使用nonlocal访问嵌套作用域中的变量引用,或者在python2中列表方式,这样就不会在函数本地新建一个局部变量
from functools import wraps import time import logging def warn(timeout): timeout = [timeout] def deco(func): def wrapper(*args,**kwargs): start = time.time() res = func(*args,**kwargs) used = time.time() -start if used > timeout[0]: msg = '"%s" : %s > %s'%(func.__name__,used,timeout[0]) logging.warn(msg) return res def setTimeout(k): #nonlocal timeout timeout[0] = k print "timeout was given...." wrapper.setTimeout = setTimeout return wrapper return deco 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) print "after set to 1...." for _ in range(30): test()
相关文章推荐
- python-实现属性可修改的函数装饰器-28
- python 禁止函数修改列表的实现方法
- python 函数如何不修改原始列表
- Python中如何禁止函数修改列表
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现
- Python实现动态添加类的属性或成员函数的解决方法
- QT 如何实现使用 QPainter 的 drawPixmap() 函数将图片文件绘制到一个 QLabel、QPushButton 或者其他的一些设备上?
- 如何在JavaScript中实现私有属性的写类方式(一)
- 如何用python实现剔除列表中相同的元素
- python通过函数属性实现全局变量的方法
- python修改函数命名方式
- 【转载】Vim如何实现函数列表
- Python 最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。 实现方式: 通过goog
- 【javac添加python 列表特性11】利用修改后的javac实现快速排序
- 如何通过修改快捷方式目标属性加载插件
- 函数实现qt的属性的修改
- PYTHON如何判断一个字典或者列表为空
- python中列表排序sort()方法或者内建函数sorted()
- python通过函数属性实现全局变量的方法