Questions tagged «yield»

yield是(1)一个关键字,它有助于创建生成器函数;(2)一个Ruby语句,将控制权从一个协程转移到另一个协程;(3)一个Java语句,用于从switch表达式产生值。

30
“ yield”关键字有什么作用?
yield关键字在Python中的用途是什么? 例如,我试图理解这段代码1: def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist >= self._median: yield self._rightchild 这是呼叫者: result, candidates = [], [self] while candidates: node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance >= min_dist: result.extend(node._values) …

17
C#中使用的yield关键字是什么?
在“ 如何仅显示IList <>的片段”问题中,答案之一具有以下代码片段: IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } } yield关键字在那里做什么?我已经在几个地方提到过它,还有另一个问题,但是我还没有弄清楚它的实际作用。我习惯于从一个线程向另一个线程屈服的角度来考虑yield,但这在这里似乎无关紧要。
827 c#  yield 


8
实际上,Python 3.3中新的“ yield from”语法的主要用途是什么?
我很难缠住PEP 380。 在什么情况下“产生于”有用? 什么是经典用例? 为什么与微线程相比? [更新] 现在,我了解了造成困难的原因。我曾经使用过生成器,但从未真正使用过协程(由PEP-342引入)。尽管有一些相似之处,但生成器和协程基本上是两个不同的概念。了解协程(不仅是生成器)是了解新语法的关键。 恕我直言,协程是最晦涩的Python功能,大多数书籍使它看起来毫无用处且无趣。 感谢您做出的出色回答,特别感谢agf及其与David Beazley演讲相关的评论。大卫·罗克。
407 python  yield 

23
我如何在Node.js(Javascript)中等待,我需要暂停一段时间
我正在为个人需求开发类似脚本的控制台。我需要能够暂停很长一段时间,但是,根据我的研究,node.js无法按需停止。一段时间后,读取用户的信息变得越来越困难...我已经看到了一些代码,但是我相信他们必须在其中包含其他代码才能使他们工作,例如: setTimeout(function() { }, 3000); 但是,我需要这段代码之后的所有内容才能在一段时间后执行。 例如, //start-of-code console.log('Welcome to My Console,'); some-wait-code-here-for-ten-seconds.......... console.log('Blah blah blah blah extra-blah'); //endcode. 我也看过类似的东西 yield sleep(2000); 但是node.js无法识别这一点。 我如何才能实现这种长时间的暂停?


8
IEnumerable和使用收益回报的递归
我有一种IEnumerable<T>用于在WebForms页面中查找控件的方法。 该方法是递归的,当返回yield return值为递归调用的值时,返回我想要的类型时遇到一些问题。 我的代码如下所示: public static IEnumerable<Control> GetDeepControlsByType<T>(this Control control) { foreach(Control c in control.Controls) { if (c is T) { yield return c; } if(c.Controls.Count > 0) { yield return c.GetDeepControlsByType<T>(); } } } 当前,这将引发“无法转换表达式类型”错误。但是IEnumerable<Object>,如果此方法返回type ,则代码会生成,但是在输出中返回错误的类型。 有没有yield return同时使用递归的使用方法?


8
当我只能使用普通的IEnumerable时,为什么要使用yield关键字?
给出以下代码: IEnumerable<object> FilteredList() { foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) yield return item; } } 为什么我不应该这样编码呢?: IEnumerable<object> FilteredList() { var list = new List<object>(); foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) list.Add(item); } return list; } 我有点理解yield关键字的作用。它告诉编译器构建某种事物(迭代器)。但是为什么要使用它呢?除了代码少一点,它对我有什么作用?
171 c#  yield 

6
立即退还所有可枚举的收益;没有循环
我具有以下功能来获取卡的验证错误。我的问题与处理GetErrors有关。两种方法具有相同的返回类型IEnumerable<ErrorInfo>。 private static IEnumerable<ErrorInfo> GetErrors(Card card) { var errors = GetMoreErrors(card); foreach (var e in errors) yield return e; // further yield returns for more validation errors } 是否可以返回所有错误GetMoreErrors而不必通过错误进行枚举? 考虑一下这可能是一个愚蠢的问题,但是我想确保自己没有错。

17
在Python中重置生成器对象
我有一个由多个yield返回的生成器对象。准备调用此生成器是相当耗时的操作。这就是为什么我想多次重用生成器。 y = FunctionWithYield() for x in y: print(x) #here must be something to reset 'y' for x in y: print(x) 当然,我会考虑将内容复制到简单列表中。有没有办法重置我的发电机?
153 python  generator  yield 

12
与Python生成器模式等效的C ++
我有一些需要在C ++中模仿的示例Python代码。我不需要任何特定的解决方案(例如基于协同例程的收益解决方案,尽管它们也是可接受的答案),我只需要以某种方式重现语义。 蟒蛇 这是一个基本的序列生成器,显然太大了,无法存储实例化版本。 def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) 目标是维护上述序列的两个实例,并以半锁步的方式在块上进行迭代。在下面的示例中,first_pass使用对的序列来初始化缓冲区,然后second_pass重新生成相同的精确序列并再次处理缓冲区。 def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) ... repeat ... C ++ 对于C ++解决方案,我唯一能找到的就是模仿yieldC ++协程,但是我还没有找到有关如何执行此操作的良好参考。我也对解决此问题的替代(非常规)解决方案感兴趣。我没有足够的内存预算来保留两次通过之间的序列副本。



8
Python:生成器表达式与产量
在Python中,通过生成器表达式创建生成器对象与使用yield语句之间有什么区别吗? 使用yield: def Generator(x, y): for i in xrange(x): for j in xrange(y): yield(i, j) 使用生成器表达式: def Generator(x, y): return ((i, j) for i in xrange(x) for j in xrange(y)) 这两个函数都返回生成器对象,这些对象生成元组,例如(0,0),(0,1)等。 一个或另一个有什么优势吗?有什么想法吗? 谢谢大家!这些答案中有很多不错的信息和进一步的参考!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.