2017/2/6

描述

比如, 考虑这样一段代码, 它的执行流程是怎样的呢 ?

class Foo(object):

@cached_property

def foo(self):

# calculate something important here

return 42

f = Foo()

f.foo

f.foo

相关代码

以class为基础的缓存装饰器

class cached_property(property):

"""A decorator that converts a function into a lazy property.  The

function wrapped is called the first time to retrieve the result

and then that calculated result is used the next time you access

the value::

class Foo(object):

@cached_property

def foo(self):

# calculate something important here

return 42

The class has to have a `__dict__` in order for this property to

work.

"""

# implementation detail: A subclass of python's builtin property

# decorator, we override __get__ to check for a cached value. If one

# choses to invoke __get__ by hand the property will still work as

# expected because the lookup logic is replicated in __get__ for

# manual invocation.

def __init__(self, func, name=None, doc=None):

self.__name__ = name or func.__name__

self.__module__ = func.__module__

self.__doc__ = doc or func.__doc__

self.func = func

def __set__(self, obj, value):

obj.__dict__[self.__name__] = value

def __get__(self, obj, type=None):

if obj is None:

return self

value = obj.__dict__.get(self.__name__, _missing)

if value is _missing:

value = self.func(obj)

obj.__dict__[self.__name__] = value

return value

上下文环境

产品版本: Python2

操作系统: Linux

搜索

相似的问题: http://stackoverflow.com/ques…

def cached_property(func):

def _deco(*args, **kwargs):

print(22222222222222)

ret = func(*args, **kwargs) #这是调用foo方法

print(44444444444444)

return ret

return _deco

class Foo(object):

def __init__(self):

print (111111111111111111)

@cached_property

def foo(self):

print(3333333333333)

return 42

f = Foo()

f.foo()

python 装饰器实现缓存_Python, 这一个缓存装饰器, 其执行流程是怎样的?相关推荐

  1. python装饰器与闭包_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。...

    转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...

  2. python闭包和装饰器的区别_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。(转)...

    呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...

  3. python装饰器代码简洁_Python基础知识之装饰器(示例代码)

    装饰器 https://www.cnblogs.com/EVA-J/articles/7194277.html 1. 装饰器的形成过程 2.装饰器的作用 3.语法糖 原则: 开放封闭原则 ------ ...

  4. python下载论文_Python实现一个论文下载器的过程

    在科研学习的过程中,我们难免需要查询相关的文献资料,而想必很多小伙伴都知道SCI-HUB,此乃一大神器,它可以帮助我们搜索相关论文并下载其原文.可以说,SCI-HUB造福了众多科研人员,用起来也是&q ...

  5. python编写下载器可暂停_python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  6. python制作qq登录界面_Python制作一个仿QQ办公版的图形登录界面

    最近,QQ的办公版本--TIM进行了一次更新升级.本次更新升级大幅修改了界面的样式,看起来更加的清爽.简洁和高效了. 这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰 ...

  7. python多线程gil_Python 多线程、多进程 (一)之 源码执行流程、GIL

    一.python程序的运行原理 许多时候,在执行一个python文件的时候,会发现在同一目录下会出现一个__pyc__文件夹(python3)或者.pyc后缀(python2)的文件 Python在执 ...

  8. python装饰器的顺序_python中多个装饰器的执行顺序详解

    装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的 ...

  9. python装饰品详解视频_Python中的各种装饰器详解

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

最新文章

  1. mysql管理员操作
  2. Google Chrome Source Code 源码下载
  3. 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
  4. python双向索引什么意思_(转)Python 实现双向链表(图解)
  5. 取整 除法_Python学习教程:Python3除法之真除法、截断除法和下取整对比
  6. 码元,波特,速率,带宽
  7. 前端框架 Bootstrap 4.5.2 发布
  8. php地址选择插件,微信小程序中关于三级联动地址选择器的实例分享
  9. 北斗/RTK高精度定位系统的优势及适用场景
  10. Vue项目 设置实时时间(年月日 时分秒)两种方法
  11. 试图加载格式不正确的程序 0x8007000b
  12. Surrogate mother是代孕妈妈,那么,Surrogate parent呢?
  13. php7.0 phalcon_phalcon php7
  14. 查看系统架构是32位还是64位--用Enki学Linux系列(15)
  15. sentinel 实时监控服务
  16. tiny6410 烧写uboot 转载
  17. Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
  18. FreeMind简介
  19. 如何将本地项目上传到码云和github,超简单
  20. 【NAS】如何利用群晖备份文件

热门文章

  1. 最后一个 IPV4 地址分配完毕,正式向IPV6过渡!
  2. 服务器操作系统的安全策略,服务器操作系统的安全策略
  3. win10系统由于服务器出错翻译失败,win10系统下谷歌浏览器翻译失败如何解决
  4. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
  5. {TypeError}argument for rectangle() given by name (‘thickness‘) and position
  6. einops 张量操作
  7. tx2 numba报错
  8. pybind 编码h264
  9. 'avpicture_fill': 被声明为已否决
  10. ValueError: Masked arrays must be 1-D