2009-11-09 11 views

Respuesta

26

C# yield return es equivalente a Python yield, y yield break es solo return en Python.

Aparte de esas pequeñas diferencias, tienen básicamente el mismo propósito.

+0

rendimiento en C# no es exactamente equivalente a la vuelta de Python. Si su función no hace nada más que el límite de rendimiento (retorno en Python), obtendrá un Enumerador vacío mientras que None en python. –

+1

Esa es una peculiaridad sintáctica menor de Python; puedes usar 'return; rendimiento' para obtener un generador vacío. –

+0

También 'yield' en Python es una expresión que puede recibir valores del sitio iterativo. 'yield return' es una declaración. – Elazar

6

La diferencia más importante es que el rendimiento de pitón le da un iterador, una vez que esté completamente reiteró que acabó.

Pero el retorno de rendimiento C# le proporciona un iterador "factory", que puede pasarlo por alto y usarlo en varios lugares de su código sin importar si se ha "enlazado" una vez.

Tome este ejemplo en 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]: 

Y en 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); 
    } 
} 

que le da: Rotura

0 
1 
2 
0 
1 
2 
Cuestiones relacionadas