标签: yield

"yield"关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码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  
Run Code Online (Sandbox Code Playgroud)

这是来电者:

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)
    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)

_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?


1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.

python iterator yield generator coroutine

9664
推荐指数
46
解决办法
212万
查看次数

C#中使用的yield关键字是什么?

在" 我如何仅公开IList的片段<>问题"中,其中一个答案包含以下代码段:

IEnumerable<object> FilteredList()
{
    foreach(object item in FullList)
    {
        if(IsItemInPartialList(item))
            yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

yield关键字有什么作用?我已经看到它在几个地方被引用,另外一个问题,但我还没弄清楚它实际上做了什么.我习惯于在一个线程产生另一个线程的意义上考虑收益率,但这似乎并不重要.

c# yield

781
推荐指数
16
解决办法
30万
查看次数

什么是"收益率突破"; 做C#?

我在MSDN中看到过这种语法:yield break但我不知道它是做什么的.有人知道吗?

.net c# yield

470
推荐指数
8
解决办法
13万
查看次数

实际上,Python 3.3中新的"yield from"语法的主要用途是什么?

我很难将我的大脑包裹在PEP 380周围.

  1. "收益率"有用的情况是什么?
  2. 什么是经典用例?
  3. 为什么它与微线程相比?

[更新]

现在我明白了我的困难的原因.我使用过发电机,但从未真正使用过协程(由PEP-342引入).尽管有一些相似之处,但生成器和协同程序基本上是两个不同的概念.理解协同程序(不仅仅是生成器)是理解新语法的关键.

恕我直言协程是最晦涩的Python功能,大多数书籍使它看起来毫无用处和无趣.

感谢您的回答,但特别感谢agf和他与David Beazley演讲相关的评论.大卫摇滚.

python yield

349
推荐指数
7
解决办法
9万
查看次数

我怎么能在Node.js(Javascript)中等待,我需要暂停一段时间

我正在为个人需求开发类似脚本的控制台.我需要能够暂停一段时间,但是,根据我的研究,node.js无法按要求停止.经过一段时间后很难读取用户的信息......我已经看到了一些代码,但我相信他们必须在其中包含其他代码才能使其工作,例如:

setTimeout(function() {
}, 3000);
Run Code Online (Sandbox Code Playgroud)

但是,在这段代码之后,我需要在一段时间后执行所有内容.

例如,

//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. 
Run Code Online (Sandbox Code Playgroud)

我也看过像

yield sleep(2000);
Run Code Online (Sandbox Code Playgroud)

但node.js不承认这一点.

我怎样才能实现这种延长的暂停?

javascript yield node.js

322
推荐指数
16
解决办法
56万
查看次数

什么是Scala的收益?

我理解Ruby和Python的收益率.Scala的收益率是多少?

functional-programming scala yield

308
推荐指数
7
解决办法
12万
查看次数

使用yield return的IEnumerable和Recursion

我有一个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>();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这当前抛出"无法转换表达式类型"错误.但是IEnumerable<Object>,如果此方法返回类型,则代码构建,但输出中返回错误的类型.

有没有使用yield return同时也使用递归的方法?

c# generics ienumerable yield

298
推荐指数
7
解决办法
7万
查看次数

JavaScript中的yield关键字是什么?

我在JavaScript中听说过"yield"关键字,但我发现它的文档很差.有人可以解释我(或推荐一个解释的网站)其用途及其用途吗?

javascript yield keyword

218
推荐指数
9
解决办法
10万
查看次数

为什么使用yield关键字,当我可以使用普通的IEnumerable时?

鉴于此代码:

IEnumerable<object> FilteredList()
{
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我不应该这样编码呢?:

IEnumerable<object> FilteredList()
{
    var list = new List<object>(); 
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            list.Add(item);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

我理解yield关键字的作用.它告诉编译器构建某种东西(迭代器).但为什么要用呢?除了代码略少之外,它对我有什么影响?

c# yield

171
推荐指数
6
解决办法
9931
查看次数

何时不使用收益率(返回)

这个问题在这里已经有了答案:
在返回IEnumerable时是否有理由不使用'yield return'?

关于这些的好处,这里有几个有用的问题yield return.例如,

我正在寻找关于何时使用的想法yield return.例如,如果我预计需要返回一个集合中的所有项目,它没有看起来就像yield是有用的,对不对?

什么情况下使用yield会限制,不必要,让我陷入困境,或者应该避免?

.net c# yield yield-return

158
推荐指数
8
解决办法
4万
查看次数