Supongamos que tengo una función que puede tomar un iterable/iterador o un iterable como argumento. Iterability se comprueba con try: iter(arg)
.Método de Python para eliminar la iterabilidad
Dependiendo de si la entrada es iterable o no, el resultado del método será diferente. No cuando quiero pasar una entrada no iterable como iterable, es fácil de hacer: simplemente lo envolveré con una tupla.
¿Qué hago cuando quiero pasar un iterable (una cadena por ejemplo) pero quiero que la función lo tome como si no fuera iterable? P.ej. hacer que iter(str)
falle.
Editar - mi intención original:
quería generalizar la función zip
en que se pueda comprimir iterables con los no iterables. El no iterable sería entonces repeat
mismo tan a menudo como los otros iterables no han terminado.
La única solución general para mí parece ser ahora, que no debería verificar dentro de la función general_zip
(debido a los problemas de cadena); pero en su lugar tendré que agregar el iterador repeat
al argumento antes de llamando al zip
. (Esto en realidad me evita inventar la función general_zip
, aunque aún podría hacerlo porque con una entrada no iterable sería inequívoco sin la repetición adicional.)
La forma de Python es para que la persona que llama sea explícita, y convierta el elemento no iterable en iterable. 'zip (mi_lista, itertools.repeat (42))' Esto es lo mismo que tener que escribir '42 + int ('100')' cuando desee agregar un int y una cadena. Agregar conversiones mágicas conduce a adivinar y confundir. –
Sí, claro. Pero necesito llamar a esta función muchas veces y luego tendría que hacer la comprobación cada vez antes de llamarla. Esto parece un poco redundante. - Entonces, la razón por la que necesito esta función es bastante estrecha y bien definida, sin embargo, me gustaría que las capacidades potenciales de esa función sean lo más generales posible. – Debilski