2009-11-09 5 views

Répondre

26

Le yield return de C# est équivalent à yield de Python, et yield break est juste return en Python.

Outre ces différences mineures, elles ont essentiellement le même but.

+0

rupture de rendement en C# est pas exactement équivalent au retour de Python. Si votre fonction ne fait rien sauf yield break (retour en Python), vous obtiendrez un Enumerator vide tandis qu'un None en python. –

+1

C'est un petit peu syntaxique de Python; vous pouvez utiliser 'return; céder »pour obtenir un générateur vide. –

+0

En outre, 'yield' en Python est une expression qui peut recevoir des valeurs du site d'itération. 'rendement rendement 'est une déclaration. – Elazar

6

La différence la plus importante est que le rendement en python vous donne un itérateur, une fois qu'il est entièrement itérer qui est fini. Mais le retour de rendement C# vous donne un itérateur "usine", que vous pouvez passer et l'utiliser à plusieurs endroits de votre code sans vous soucier de savoir s'il a déjà été "bouclé" une fois.

Prenez cet exemple 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]: 

Et 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); 
    } 
} 

Cela vous donne:

0 
1 
2 
0 
1 
2 
Questions connexes