2009-11-09 12 views

Odpowiedz

26

C# 's yield return jest odpowiednikiem Pythona yield, a yield break jest po prostu return w Pythonie.

Inne niż te drobne różnice, mają w zasadzie ten sam cel.

+0

wydajność w C# nie jest dokładnie równoważne zamian Pythona. Jeśli twoja funkcja nie robi nic poza breakiem plonu (return w Pythonie), otrzymasz pusty Enumerator, podczas gdy None w python. –

+1

To niewielkie syntaktyczne dziwactwo Pythona; możesz użyć 'return; wydajność ", aby uzyskać pusty generator. –

+0

Również 'yield' w Pythonie jest wyrażeniem, które może odbierać wartości z iteracyjnej strony. 'return return' to oświadczenie. – Elazar

6

Najważniejszą różnicą jest to, że wydajność python daje iterator, gdy jest ona w pełni potwierdził, że to koniec.

Ale zwrot z C# daje ci "Iterator" fabrycznie ", który możesz przekazać i używać go w wielu miejscach kodu, bez względu na to, czy został" zapętlony "raz wcześniej.

Weźmy ten przykład w Pythonie:

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]: 

A w 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); 
    } 
} 

który daje: przerwa

0 
1 
2 
0 
1 
2 
Powiązane problemy