(incluso el título de esto va a causar llamas, comprendo)Simulando C-estilo para los bucles en Python
Python tomó la decisión de diseño deliberada a tienen el uso for
bucle iterables explícitos, con el beneficio de forma considerable código simplificado en la mayoría de los casos.
Sin embargo, a veces es todo un dolor de construir un iterable si su caso de prueba y la función de actualización son complicados, y así me encuentro escribiendo los siguientes ciclos while:
val = START_VAL
while <awkward/complicated test case>:
# do stuff
...
val = <awkward/complicated update>
El problema con esto es que la actualización se encuentra en la parte inferior del bloque while
, lo que significa que si yo quiero tener un continue
incrustado en algún lugar que tengo que:
uso de código duplicado para la actualización complicada/awkard, Y
corre el riesgo de olvidar y tener mi código bucle infinito
Podría seguir la ruta de la mano de laminación en un iterador complicada:
def complicated_iterator(val):
while <awkward/complicated test case>:
yeild val
val = <awkward/complicated update>
for val in complicated_iterator(start_val):
if <random check>:
continue # no issues here
# do stuff
Esto me parece muuuuchas demasiado detallado y complicado ¿Las personas en desbordamiento de pila tienen una sugerencia más simple?
Respuesta a los comentarios:
@Glenn Maynard: Sí, lo desestimó la respuesta. Es malo escribir cinco líneas si hay una manera de hacerlo en una ... especialmente en un caso que aparece todo el tiempo (el bucle es una característica común de los programas completos de Turing).
Para las personas que buscan un ejemplo concreto: digamos que estoy trabajando con una biblioteca de fechas personalizada. Mi pregunta sería entonces, ¿cómo expresar esto en Python:
for (date = start; date < end; date = calendar.next_quarter_end(date)):
if another_calendar.is_holiday(date):
continue
# ... do stuff...
añejo de val val actualizo e inmediatamente en la siguiente línea? y usa oldval en todas partes donde usaste val antes? –
Un buen ejemplo de código sería bueno. Nunca he tenido que escribir un código tan incómodo en Python ... –
¿Qué pasa con el primero? Necesitas todos esos elementos. ¿Es solo que C permite todo esto en una línea y Python no? – phkahler