El día 17 de septiembre de 2009 15:48, escribió: > > >  On Thu, 17 Sep 2009 14:32:30 -0300, Roberto Alsina wrote: > >>On Thursday 17 September 2009 13:47:33 guagliap@tutopia.com wrote: >>> def firstTrue(cond): >>>     """ devuelve True siempre la primera vez que se la ejecuta, las veces >>>  subsiguientes evalua la condicion """ stack = inspect.stack()[1]      # El >>>  stack del programa llamador line = stack[2]                 # Nro de linea >>>  desde la que llame a firstTrue del stack >>> >>>     if not "line" in firstTrue.__dict__: >>>         # Primera vez que llamo a la funcion >>>         firstTrue.line = line >>>         return True >>>     elif firstTrue.line != line: >>>         # Llame a la funcion desde otro punto del programa >>>         firstTrue.line = line >>>         return True >>> >>>     return cond >> >>A ver... >> >>def firstTrue(): >>       yield True >>       while True: >>               yield False >> >>ft=firstTrue() >>print ft.next() >>print ft.next() >>print ft.next() >> >>Produce >> >>True >>False >>False >> >>y es un poco más pitónico ;-) > > > bueno, pero la idea de la función que yo había posteado era que sirviera de una forma > genérica para evitar el if ... break dentro del while, en vez de: > > while True: >         >        if not : >                break > > usaría: > > while firstTrue (): >         > > > Saludos, > Pablo > > Pero fijate vos cuántas complicaciones y vueltas para lograr algo que el if ... break hace de forma tan legible y pythonica :) En python se da también una situación particular que justo afecta a este caso y es que dentro de los fors y los whiles no se pueden hacer asignaciones como por ejemplo en C/C++. Es decir que no se puede hacer algo tipo: while(!edad = validar_edad()) { printf("que sea un numero la proxima"); } if(edad > 18) { printf("metete al puticlub"); } else { printf("anda a ver los power rangers"); } A lo que se me ocurre que algo como esto es factible: edad = None def validar_edad(): global edad edad = raw_input() return edad.isdigit() while not validar_edad(): print "que sea un numero la proxima" edad = int(edad) if edad > 18: print "metete al puticlub" else: print "anda a ver los power rangers" No se me gusta mucho mas el while True: if ... break que tiró Roberto Alsina. Saludos, -- Fabián E. Gallina http://www.from-the-cloud.com --------------------------------------------------------------------- Para dar de baja la suscripcion, mande un mensaje a: pyar-unsubscribe@decode.com.ar Para obtener el resto de direcciones-comando, mande un mensaje a: pyar-help@decode.com.ar PyAr - Python Argentina - Sitio web: http://www.python.com.ar/