Questions tagged «yield»

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

5
在C#中,为什么匿名方法不能包含yield语句?
我认为做这样的事情会很好(用lambda进行收益回报): public IList<T> Find<T>(Expression<Func<T, bool>> expression) where T : class, new() { IList<T> list = GetList<T>(); var fun = expression.Compile(); var items = () => { foreach (var item in list) if (fun.Invoke(item)) yield return item; // This is not allowed by C# } return items.ToList(); } 但是,我发现我不能在匿名方法中使用yield。我想知道为什么。该产量的文档只是说,这是不允许的。 由于不允许使用,我只创建了List并将项目添加到其中。

4
使用收益递归
有什么方法可以混合使用递归和yield语句吗?例如,无限数生成器(使用递归)将类似于: def infinity(start): yield start # recursion here ... >>> it = infinity(1) >>> next(it) 1 >>> next(it) 2 我试过了: def infinity(start): yield start infinity(start + 1) 和 def infinity(start): yield start yield infinity(start + 1) 但是他们都没有做我想要的事情,第一个在屈服后停止start,第二个在屈服之后start,然后是发电机,然后停了下来。 注意:请知道,您可以使用while循环来做到这一点: def infinity(start): while True: yield start start += 1 我只想知道这是否可以递归进行。

6
Ruby:Proc#call与收益
以下两种在Ruby中实现该thrice方法的行为差异是什么? module WithYield def self.thrice 3.times { yield } # yield to the implicit block argument end end module WithProcCall def self.thrice(&block) # & converts implicit block to an explicit, named Proc 3.times { block.call } # invoke Proc#call end end WithYield::thrice { puts "Hello world" } WithProcCall::thrice { puts …
77 ruby  yield 

4
收益和收益在同一个函数中
像这样在Python的同一函数中使用yield和return时,究竟发生了什么? def find_all(a_str, sub): start = 0 while True: start = a_str.find(sub, start) if start == -1: return yield start start += len(sub) # use start += 1 to find overlapping matches 还是发电机吗?
77 python  yield 

1
列表理解和生成器表达式的收益
以下行为对我来说似乎很违反直觉(Python 3.4): >>> [(yield i) for i in range(3)] <generator object <listcomp> at 0x0245C148> >>> list([(yield i) for i in range(3)]) [0, 1, 2] >>> list((yield i) for i in range(3)) [0, None, 1, None, 2, None] 最后一行的中间值实际上并不总是None,它们是send生成器中使用的值,相当于(我想)以下生成器: def f(): for i in range(3): yield (yield i) 这三行代码完全起作用使我感到很有趣。该参考指出,yield仅在一个函数定义允许的(虽然我可能读错和/或它可能只是已经从旧版本复制)。前两行在SyntaxErrorPython 2.7中产生a ,但第三行却没有。 …

6
将“ yield from”语句转换为Python 2.7代码
我在Python 3.2中有一个下面的代码,我想在Python 2.7中运行它。我确实进行了转换(missing_elements在两个版本中都放了代码),但是我不确定这是否是最有效的方法。基本上,如果函数的yield from上半部和下半部有两个类似下面的调用,会发生什么情况missing_element?是否将两个半部分(上半部分和下半部分)中的条目彼此追加到一个列表中,以便父递归函数与yield from调用一起使用,并将两个半部分一起使用? def missing_elements(L, start, end): # Python 3.2 if end - start <= 1: if L[end] - L[start] > 1: yield from range(L[start] + 1, L[end]) return index = start + (end - start) // 2 # is the lower half consecutive? consecutive_low = L[index] == …

5
从调用生成器的函数返回还是让出?
我有一个生成器generator,还有一个便捷的方法- generate_all。 def generator(some_list): for i in some_list: yield do_something(i) def generate_all(): some_list = get_the_list() return generator(some_list) # <-- Is this supposed to be return or yield? 应该generate_all return还是yield?我希望两种方法的用户都使用相同的方法,即 for x in generate_all() 应该等于 some_list = get_the_list() for x in generate(some_list)

2
在PHP中:“ return”,“ yield”,“ yield from”和将yield和return混合在同一函数之间有什么区别?
return和之间的区别yield似乎很明显,直到我弄清楚那里也存在,yield from并且可以将两者return和yield相同的功能组合在一起! 我的理解return是,之后的所有事情都没有执行,对吗? 然而: function generate(): iterable { return [1, 2, 3]; } foreach (generate() as $value) { echo $value; } 产生:“ 123” 但是以下内容: function generate(): iterable { return [1, 2, 3]; yield; } foreach (generate() as $value) { echo $value; } 什么都不产生!这样就意味着执行了yield? 这是一个错误吗?
10 php  return  generator  yield 
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.