- 浏览: 241442 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一个函数,返回封装原始函数调用的一个子函数。
通用的模式如下。
当装饰器需要参数时,必须使用第二级封装。
参数检查:
缓存:
代理:
上下文提供者:
补充:http://2057.iteye.com/blog/1838398
参考资料:
Python高级编程
通用的模式如下。
def my_decorator(function): def _my_decorator(*args, **kw): #在调用实际函数之前做些填充工作 res = function(*args, **kw) #做完某些填充工作之后 return res #返回子函数 return _my_decorator
当装饰器需要参数时,必须使用第二级封装。
def my_decorator(arg1, arg2): def _my_decorator(function): def __my_decorator(*args, **kw): res = function() return res return __my_decorator return _my_decorator
引用
因为装饰器在模块第一次被读取时由解释程序装入,所以它们的使用必须受限于总体上可以应用的封装器。如果装饰器与方法的类或所增强的函数签名绑定,它应该被重构为常规的可调用对象,从而避免复杂性。在任何情况下,当装饰器处理API时,一个好的方法是将它们聚集在一个易于维护的模块中。
参数检查:
def check_param_isvalid(): def check(method): def check_param(*args,**kwargs): for a in args: assert isinstance(a, int),"arg %r does not match %s" % (a,int) assert a > 100000,"arg %r must gt 100000" % a return method(*args, **kwargs) return check_param return check @check_param_isvalid() def foo(*args): print args foo(200000,500000)
缓存:
import time import hashlib import pickle cache = {} def is_obsolete(entry, duration): return time.time() - entry['time'] > duration def computer_key(function, args, kw): key = pickle.dumps((function.func_name, args, kw)) return hashlib.sha1(key).hexdigest() def memoize(duration=30): def _memoize(function): def __memoize(*args, **kw): key = computer_key(function, args, kw) if key in cache and not is_obsolete(cache[key], duration): print 'wo got a winner' return cache[key]['value'] result = function(*args, **kw) cache[key] = {'value':result,'time':time.time()} return result return __memoize return _memoize @memoize() def very_complex_stuff(a,b): return a + b print very_complex_stuff(2,2)
代理:
class User(object): def __init__(self, roles): self.roles = roles class Unauthorized(Exception): pass def protect(role): def _protect(function): def __protect(*args, **kw): user = globals().get('user') if user is None or role not in user.roles: raise Unauthorized("I won't tell you") return function(*args, **kw) return __protect return _protect tarek = User(('admin', 'user')) bill = User(('user',)) class MySecrets(object): @protect('admin') def waffle_recipe(self): print 'use tons of butter!' these_are = MySecrets() user = tarek these_are.waffle_recipe() user = bill these_are.waffle_recipe()
上下文提供者:
from threading import RLock lock = RLock() def synchronized(function): def _synchronized(*args, **kw): lock.acquire() try: return function(*args, **kw) finally: lock.release() return _synchronized @synchronized def thread_safe(): print 'haha' thread_safe()
补充:http://2057.iteye.com/blog/1838398
参考资料:
Python高级编程
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1721方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2185Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2807迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3421time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
python list
2013-10-15 22:56 1209简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 930安装lib easy_install xlrd def ... -
排序算法学习(python版本)之堆排序(HeapSort)
2013-07-01 22:54 1956Contains: 堆排序以及堆排序的应用 堆排序(Heaps ... -
python range xrange
2013-06-25 23:30 1101引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1785引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7016网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2158如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8451、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1322Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1147Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 12401、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5292Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2114自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2797#!/usr/bin/env python #-*-en ... -
Tornado httpserver 源码简析
2013-03-17 01:49 1740整个流程就是创建一个socket socket.socket ...
相关推荐
!!!CSDN的一个特性: 即使我...关于Python装饰器课程的课件代码相关文件, 文字版讲义见: https://blog.csdn.net/ncepu_Chen/article/details/106075394 视频版本讲义见: https://www.bilibili.com/video/BV1SZ4y1s7cv/
今天小编就为大家分享一篇关于Python装饰器限制函数运行时间超时则退出执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
python装饰器详解,python装饰器笔记心得
本工程是使用demo构建装饰器,以及装饰器的使用案例。 从最简单的装饰器到带参数的,带任意参数的,到类装饰器等。代码案例比较全。可作为学习参考与交流。
Python装饰器-失败用例自动重试
python装饰器是一个用于封装函数、方法或类的代码的工具,用来显式指定管理它们的代码。一次编写,可用于多种不同的情况。在python 的流行框架中,装饰器应用越来越广泛。用类设计装饰器,可以利用实例属性保持装饰...
Python装饰器decoder.py 装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器, 就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。下面就一 步步看看Python中...
python 装饰器(示例)
装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数...Python装饰器以两种形式呈现: 【1】函数装饰器在函数定义的时候进行名称重绑定,提供一个逻
python 装饰器概述装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。代码de
接口测试使用Python装饰器.doc
Python36_01----python装饰器
本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下: 写装饰器 装饰器只不过是一种函数,接收被装饰的可调用对象作为它的唯一参数,然后返回一个可调用对象(就像前面的简单例子) 注意重要的一点,...
异步属性的Python装饰器。 的Python:3.6+ 免费软件:MIT许可证 说明文件: : 包: : 源代码: : 安装 要安装async_property,请在您的终端中运行以下命令: $ pip install async-property 或者,如果您有...
python装饰器的详细接受,适用于小白刚接触到函数,想要弄清楚什么是装饰器,希望大家喜欢,喜欢的话记得点赞哦!谢谢!!!
python装饰器的4中类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类的详细说明。
python装饰器(csdn)————程序
python装饰器的引入到最终的应用实例,对python装饰的精华部分进行解读,明确写出了理解语法的关键要点。
Python 装饰器如果函数 xxx_1 作为参数传入 xxx_2 函数并被其使用,且在最后改变了 xxx_2 函数的返回结果,我们便称函数 xxx_2 为装饰