2009-11-09 180 views

回答

26

C#的yield return相当于Python的yield,并且yield break仅仅是Python中的return

除了这些微小的差异之外,它们的目的基本相同。

+0

产量突破并不完全等同于Python的回报。如果你的函数除了yield break(Python中的返回值)之外什么都不做,你将在Python中获得一个空的Enumerator而None。 – 2011-06-18 09:01:19

+1

这是Python的一个小小的语法怪癖;你可以使用'return;产量“得到一个空的发电机。 – 2011-08-06 22:16:46

+0

Python中的'yield'也是可以从迭代站点接收值的表达式。 “收益回报”是一个陈述。 – Elazar 2017-08-29 20:48:32

6

最重要的区别是,蟒蛇产量为您提供了一个迭代器,一旦完全重复该结束了。

但是,C#收益回报为您提供了一个迭代器“工厂”,您可以将它传递并在代码的多个位置使用它,而不必关心它之前是否“循环”过一次。

拿这个例子中的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]: 

而在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); 
    } 
} 

这就给了你:在C#

0 
1 
2 
0 
1 
2