Python中的yield和C#中的yield之间的差异

max*_*yfc 25 c# python

yieldPython中的yield关键字和C#中的关键字有什么区别?

Joh*_*kin 29

C#yield return等同于Python yield,yield break只是return在Python中.

除了那些微小的差异,它们的目的基本相同.

  • 这是Python的一个小语法怪癖。您可以使用`return; 产生一个空的发电机。 (2认同)

Sou*_*sou 14

这可能有助于您理解它:C#,Python和Ruby中的迭代器


小智 12

最重要的区别是python yield为你提供了一个迭代器,一旦完全迭代就结束了.

但是C#yield return为你提供了一个迭代器" 工厂",你可以传递它并在你的代码的多个地方使用它,而不用考虑它是否曾经"循环"过一次.

以python为例:

In [235]: def func1():
   .....:     for i in xrange(3):
   .....:         yield i
   .....:

In [236]: x1 = func1()

In [237]: for k in x1:
   .....:     print k
   .....:
0
1
2

In [238]: for k in x1:
   .....:     print k
   .....:

In [239]:
Run Code Online (Sandbox Code Playgroud)

在C#中:

class Program
{
    static IEnumerable<int> Func1()
    {
        for (int i = 0; i < 3; i++)
            yield return i;
    }

    static void Main(string[] args)
    {
        var x1 = Func1();
        foreach (int k in x1) 
            Console.WriteLine(k);

        foreach (int k in x1)
            Console.WriteLine(k);
    }
}
Run Code Online (Sandbox Code Playgroud)

这给你:

0
1
2
0
1
2
Run Code Online (Sandbox Code Playgroud)