草庐IT

Python 惰性求值器

是否有一种Pythonic方式来封装惰性函数调用,从而在第一次使用函数f()时,它会调用先前绑定(bind)的函数g(Z)并在连续调用f()时返回一个缓存值?请注意,内存可能不是一个完美的选择。我有:f=g(Z)ifx:return5elify:returnfelifz:returnh(f)代码有效,但我想重组它,以便仅在使用该值时调用g(Z)。我不想更改g(...)的定义,而且Z有点大,无法缓存。编辑:我假设f必须是一个函数,但事实可能并非如此。 最佳答案 我有点困惑你是寻求缓存还是惰性求值。对于后者,查看模块lazy.pybyA

Python,惰性列表

是否可以在Python中延迟计算列表?例如a=1list=[a]printlist#[1]a=2printlist#[1]如果列表设置为惰性求值,那么最后一行将是[2] 最佳答案 “惰性”求值的概念通常伴随函数式语言出现——但在这些语言中,您无法将两个不同的值重新分配给同一个标识符,因此,即使在那里,您的示例也无法重现。重点根本不是懒惰——而是保证使用标识符与获取对标识符所引用的相同值的引用是相同的,并且重新分配一个标识符,一个裸名,到一个不同的值,保证使标识符引用一个与它们不同的值。对第一个值(对象)的引用不会丢失。考虑一个类似的

Python惰性列表

我想创建我自己的集合,它具有python列表的所有属性,并且还知道如何将自身保存到数据库中/从数据库中加载自身。此外,我想让加载隐式和惰性,因为它不会在创建列表时发生,而是等到第一次使用时发生。是否有一个单一的__xxx__方法我可以覆盖以在第一次使用任何列表属性(例如len、getitem)时加载列表,iter...等)而不必全部覆盖它们? 最佳答案 不是单个,但5个就足够了:fromcollectionsimportMutableSequenceclassMonitored(MutableSequence):  def__ini

python - Clojure 和 Python 中的惰性无限序列

以下是我能在Clojure和Python中找到的惰性无限斐波那契数列的最佳实现:Clojure:(deffib-seq(lazy-cat[01](map+fib-seq(restfib-seq))))示例用法:(take5fib-seq)python:deffib():a=b=1whileTrue:yieldaa,b=b,a+b示例用法:foriinfib():ifi>100:breakelse:printi显然Python代码更直观。我的问题是:在Clojure中是否有更好(更直观和简单)的实现?编辑我正在打开后续问题ClojurePrimeNumbers

python - Python3中 map 的非惰性评估版本?

我正在尝试在Python3中使用map。这是我正在使用的一些代码:importcsvdata=[[1],[2],[3]]withopen("output.csv","w")asf:writer=csv.writer(f)map(writer.writerow,data)然而,由于Python3中的map返回一个迭代器,这段代码在Python3中不起作用(但在Python2中工作正常,因为该版本的map总是返回一个列表)我目前的解决方案是在迭代器上添加一个list函数调用以强制求值。但这似乎很奇怪(我不关心返回值,为什么要把迭代器转换成列表?)有更好的解决方案吗?

javascript - 音频标签的 Html5 惰性 'onplay' 事件处理程序?

使用新的Html5音频标签,onplay事件似乎只在第一次播放音频时触发。在此示例中,当单击“播放”时,音频开始并显示“正在播放”的警报弹出窗口。当音频结束并再次单击“播放”时,音频将再次开始但不会触发任何警报。我在这里错过了什么吗?我是否必须以某种方式重置音频?Play我也尝试过使用jQuery绑定(bind)到播放事件,但我得到了相同的结果。Play$(document).ready(function(){$('#audio')[0].bind('play',function(){alert("Playing");});}); 最佳答案

ios - 对于 CoreData,如果我有一个 @dynamic 属性,我可以像 @synthesized 一样覆盖它的 getter 吗? (惰性实例化)

我使用CoreData创建了一个实体,然后我将它子类化到它自己的文件中,其中它有@propertys,然后它在.m文件中有@dynamic部分。当我希望某些东西具有某个值但从未设置过时,我总是使用惰性实例化,如下所示:-(NSString*)preview{if([self.bodylength]但是我如何使用@dynamic属性来做到这一点呢?如果我做同样的事情,它会说_preview是一个未声明的属性,但它在.h文件中。我要做什么来延迟实例化它? 最佳答案 一个标准的方法是在CoreData模型中将preview定义为一个tra

objective-c - 什么时候在 iOS 中使用惰性实例化?

我听说在iOS中对象的惰性实例化很常见,但是我不确定什么时候应该使用它?有人可以简要说明什么时候应该使用惰性实例化,什么时候应该只在init方法中初始化我的属性吗?我对惰性实例化的担心是它需要大量代码(与只在init方法中编写所有代码相比),尤其是当您有多个属性要初始化时。 最佳答案 详细说明我的评论。有时,如果您有一个只需要配置一次的对象并且涉及一些您不想弄乱您的init方法的配置,那么这种技术是很好的。-(UIView*)myRoundedView;{if(!_myRoundedView){_myRoundedView=[[UI

swift - Swift 中的惰性

这里为什么要用lazy?extensionSequenceType{funcmapSome(transform:Generator.Element->U?)->[U]{varresult:[U]=[]forcaseletx?inlazy(self).map(transform){result.append(x)}returnresult}}此扩展接受一个转换函数,该函数返回一个可选值,并返回一个仅包含那些未转换为nil的值的数组为什么不直接使用self.map(transform)呢?这里需要懒惰吗? 最佳答案 它避免了创建中间数组

swift - 惰性可选属性始终为零?

是否有以下代码总是打印出nil的原因?classFoo{@lazyvarbar:Int?=5}println(Foo().bar)我认为当访问bar属性时它会被初始化为5。 最佳答案 抛开为什么要这样做,这里的问题是您需要提供一个惰性属性,一个初始化程序,它可以在首次调用时使用。编写上述代码的正确方法是:classFoo{lazyvarbar=Int(5)}print(Foo().bar) 关于swift-惰性可选属性始终为零?,我们在StackOverflow上找到一个类似的问题: