一个名为python pattern和Wikipedia的github存储库告诉我们什么是惰性评估。

将expr的评估延迟到需要其值为止,并避免重复评估。

python3中的cached_property不是一个完整的延迟评估,因为它不能避免重复评估。

惰性评估的一个更经典的示例是cached_property:

import functools

class cached_property(object):

def __init__(self, function):

self.function = function

functools.update_wrapper(self, function)

def __get__(self, obj, type_):

if obj is None:

return self

val = self.function(obj)

obj.__dict__[self.function.__name__] = val

return val

cached_property(也称为lazy_property)是一个装饰器,可将功能转换为惰性评估属性。 首次访问属性时,将调用func以获得结果,然后在下次访问该属性时使用该值。

例如:

class LogHandler:

def __init__(self, file_path):

self.file_path = file_path

@cached_property

def load_log_file(self):

with open(self.file_path) as f:

# the file is to big that I have to cost 2s to read all file

return f.read()

log_handler = LogHandler('./sys.log')

# only the first time call will cost 2s.

print(log_handler.load_log_file)

# return value is cached to the log_handler obj.

print(log_handler.load_log_file)

要使用适当的单词,像range这样的python生成器对象更像是通过call_by_need模式设计的,而不是惰性求值的

python中and和or的惰性求值特点_Python中的惰性评估相关推荐

  1. python中and和or的惰性求值特点_python中的惰性求值

    可能经常会有人问到python中的range和xrange有什么区别,你知道range是直接创建了一个列表,而xrange是创建了一个生成器,并且xrange非常适合当需要创建一个很大的列表的时候,因 ...

  2. python中and和or的惰性求值特点_Python 惰性求值

    Python 惰性求值,函数式编程高效,原因之一是将计算推迟到需要的时候进行.惰性(也称"非严格")求值非常重要,Python内置了对它的支持. Python中,逻辑运算符and. ...

  3. java惰性计算原理_利用 Lambda 表达式实现 Java 中的惰性求值

    Java 中惰性求值的潜能,完全被忽视了(在语言层面上,它仅被用来实现 短路求值 ).更先进的语言,如 Scala,区分了传值调用与传名调用,或者引入了 lazy 这样的关键字. 尽管 Java 8 ...

  4. python中and和or的惰性求值特点_惰性求值和yield-Python

    惰性求值 惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式.表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值. 除可以得到性能的提升(更小的内存占用)外,惰性 ...

  5. python惰性求值的特点_C#教程之C#函数式编程中的惰性求值详解

    https://www.xin3721.com/eschool/python.html 惰性求值 在开始介绍今天要讲的知识之前,我们想要理解严格求值策略和非严格求值策略之间的区别,这样我们才能够深有体 ...

  6. python中关系运算符惰性求值_python对象属性惰性取值

    python面向对象进阶 在知乎上面看到这个如何让python对象属性具有惰性求值的能力,认真学习了一番,记录一下. __setattr__.__getattr__.__delattr__ class ...

  7. python中关系运算符惰性求值,lazy.js 惰性求值实现分析

    背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...

  8. 让Python中类的属性具有惰性求值的能力

    起步 我们希望将一个只读的属性定义为 property 属性方法,只有在访问它时才进行计算,但是,又希望把计算出的值缓存起来,不要每次访问它时都重新计算. 解决方案 定义一个惰性属性最有效的方法就是利 ...

  9. python惰性求值_让Python中类的属性具有惰性求值的能力

    起步 我们希望将一个只读的属性定义为 property 属性方法,只有在访问它时才进行计算,但是,又希望把计算出的值缓存起来,不要每次访问它时都重新计算. 解决方案 定义一个惰性属性最有效的方法就是利 ...

最新文章

  1. Aspose.words 书签定位
  2. 高房价可控制人口增长与人口素质?
  3. C语言实现:将一个字符串插入到另一个字符串的指定位置
  4. 主成分分析 PCA算法
  5. word2vec介绍
  6. UBuntu安裝使用PIP
  7. android+多种行视图,android – 在react-native列表视图中显示多种类型行的正确方法是什么?...
  8. 嵌入式工作笔记0004---常见术语积累--随时更新
  9. 计算机网络学习笔记(23. HTTP连接类型)
  10. 开源PDF文件处理工具箱
  11. Labview视觉模块安装
  12. Cassandra数据库模糊查询
  13. WinCE同步(ActiveSync)问题
  14. Word公式插件Mathpix Snip
  15. javascript打飞机程序8x8x飞机大战
  16. 魔术方法、5个类的魔术属性和单态
  17. 火车票能不能选座_终于,买火车票也能选座了!
  18. Pytroch 深度学习 跑CIFAR10数据集
  19. 数据标注是什么,如何进行数据标注?
  20. openstack-iass搭建 二

热门文章

  1. java selenium (十二) 操作弹出窗口
  2. [坐标]关于坐标系和投影的相关知识探讨[转]
  3. Linux系统瘦身裁剪 续
  4. MA5683T开局大致开局指导
  5. [转]数据库主键设计文章绘粹
  6. 轻松搞定 Nginx 配置的好工具!
  7. 回头看看的时候openeim001
  8. 飞鸽传书:浅谈 Scrum
  9. 2020年什么编程语言最受欢迎,待遇最高?
  10. 第二节:ES7 新增的 includes 特性