while True

tny a.porrua en gmail.com
Mie Nov 8 23:42:41 CET 2006


El mar, 07-11-2006 a las 20:34 -0500, Arnau Sanchez escribió:
> tny escribió:
> 
> >> while 1:
> >>     l = s.recv(1024)
> >>     if not l: break
> >>     f.write(l)
> > 
> > disculpa pero de éste modo haces el 2 comprobaciones de l por cada
> > iteración, será más pytónico pero también es más ineficiente.
> 
> No te entiendo, "l" sólo se comprueba una vez por iteración, en el if. Como en 
> algunas tipografías estos caracteres se parecen mucho, quizá hayas confudido la 
> "l" (ele) con el "1" (uno). Por costumbre siempre uso "while 1", pero para que 
> quede más claro:
> 
> #while 1:
> while True:
> 	data = s.recv(1024)
> 	if not data: break
> 	f.write(data)
> 
> sobre la construcción while/if/break:
> 
> http://www.python.org/doc/faq/es/general.html#por-qu-no-puedo-usar-una-asignaci-n-en-una-expresi-n

Pues sí, es cierto que confundí 'l' con '1', pero en definitiva es
añadir una comprobación más.
Pero aún así no me acaba de convencer.

Acepto que desde el punto de vista del desarrollo sea más cómodo y clara
lo del 'while True:' pero punto de vista de la ejecución prefiero lo de
'x=loquesea\nwhile x:' 

Tal vez para enviar un archivo no tenga mucha importancia, pero si puedo
escoger me quedo con la opción más rápida. 

Ejemplo.

>>> import time
>>> def prueba1(iteraciones):
...     print time.ctime()
...     a=iteraciones
...     while a:
...             a-=1
...
>>> def prueba2(iteraciones):
...     print time.ctime()
...     while True:
...             iteraciones-=1
...             if not iteraciones:
...                     break
...     print time.ctime()
...
>>> prueba1(10000000)
Wed Nov  8 23:21:54 2006
Wed Nov  8 23:21:58 2006
>>> prueba2(10000000)
Wed Nov  8 23:22:04 2006
Wed Nov  8 23:22:10 2006

prueba1 tardo 4 segundos
prueba2 tardo 6 segundos


No pretendo discutir por discutir, mi intención es que podamos aprender
todos un poco, que me saquéis de mi error si estoy equivocado, y mostrar
el verdadero camino de la serpiente si soy un iluminado del fósforo
verde. XD



------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es