Todos los días amo Python más y más.
Hoy estaba escribiendo un código como:
for i in xrange(N):
do_something()
Tenía que hacer algo N veces. Pero cada vez no dependía del valor de i
(variable de índice). Me di cuenta de que estaba creando una variable que nunca usé ( i
), y pensé "Seguramente hay una forma más pitónica de hacerlo sin la necesidad de esa variable de índice inútil".
Entonces ... la pregunta es: ¿sabes cómo hacer esta tarea simple de una manera más hermosa (pitónica)?
coding-style
for-loop
python
Manuel Aráoz
fuente
fuente
range
lugar.Respuestas:
Un enfoque un poco más rápido que el bucle
xrange(N)
es:fuente
Use la variable _, como aprendí cuando hice esta pregunta , por ejemplo:
fuente
Solo uso
for _ in range(n)
, es directo al grano. Generará la lista completa para grandes números en Python 2, pero si está usando Python 3 no es un problema.fuente
Dado que la función es un ciudadano de primera clase, puede escribir un pequeño contenedor (de las respuestas de Alex)
entonces puedes pasar la función como argumento.
fuente
El _ es lo mismo que x. Sin embargo, es un idioma de Python que se utiliza para indicar un identificador que no tiene intención de usar. En python, estos identificadores no toman memor ni asignan espacio como lo hacen las variables en otros idiomas. Es fácil olvidar eso. Son solo nombres que apuntan a objetos, en este caso un número entero en cada iteración.
fuente
Las varias respuestas me parecieron realmente elegantes (especialmente las de Alex Martelli) pero quería cuantificar el rendimiento de primera mano, así que preparé el siguiente script:
También se me ocurrió una solución alternativa que se basa en la de Martelli y que se usa
map()
para llamar a la función de carga útil. Bien, hice un poco de trampa al tomar la libertad de hacer que la carga útil aceptara un parámetro que se descarta: no sé si hay alguna forma de evitar esto. Sin embargo, aquí están los resultados:por lo tanto, el uso del mapa produce una mejora de aproximadamente el 30% sobre el bucle estándar y un 19% adicional sobre el de Martelli.
fuente
Suponga que ha definido do_something como una función y le gustaría realizarlo N veces. Quizás puedas probar lo siguiente:
fuente
fn() for fn in itertools.repeat(do_something, N)
y guardar pregenerando la matriz ... este es mi idioma preferido.¿Qué pasa con un simple ciclo while?
Ya tienes la variable; ¿Por qué no usarlo?
fuente