velocidad programacion lenguajes español c# python

programacion - Diferencia entre el rendimiento en Python y el rendimiento en C#



python vs c# español (4)

¿Cuál es la diferencia entre la palabra clave de yield en Python y la palabra clave de yield en C #?


El yield return del yield return C # es equivalente al yield de Python, y el yield break es solo el return en Python.

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



La diferencia más importante es que el rendimiento de Python le brinda un iterador, una vez que se haya iterado completamente, se habrá terminado.

Pero el rendimiento de C # le da un iterador "de fábrica" , que puede pasarlo y usarlo en múltiples lugares de su código sin importar si se ha "enrollado" una vez antes.

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

Eso te da:

0 1 2 0 1 2


Una distinción importante a destacar, además de otras respuestas, es que el yield en C # no se puede usar como una expresión, solo como una declaración.

Un ejemplo del uso de la expresión de yield en Python (ejemplo pegado desde here ):

def echo(value=None): print "Execution starts when ''next()'' is called for the first time." try: while True: try: value = (yield value) except GeneratorExit: # never catch GeneratorExit raise except Exception, e: value = e finally: print "Don''t forget to clean up when ''close()'' is called." generator = echo(1) print generator.next() # Execution starts when ''next()'' is called for the first time. # prints 1 print generator.next() # prints None print generator.send(2) # prints 2 generator.throw(TypeError, "spam") # throws TypeError(''spam'',) generator.close() # prints "Don''t forget to clean up when ''close()'' is called."