Cuando me encuentro con la situación, puedo hacerlo en javascript, siempre pienso que si hay una foreach
función sería conveniente. Por foreach me refiero a la función que se describe a continuación:
def foreach(fn,iterable):
for x in iterable:
fn(x)
simplemente lo hacen en cada elemento y no producen o devuelven algo, creo que debería ser una función incorporada y debería ser más rápido que escribirlo con Python puro, pero no lo encontré en la lista, o ¿acabo de llamar a otro nombre? ¿O acabo de perder algunos puntos aquí?
Tal vez me equivoqué, porque llamar a una función en Python cuesta mucho, definitivamente no es una buena práctica para el ejemplo. En lugar de un bucle de salida, la función debería hacer que el bucle en el lado de su cuerpo se vea así a continuación, que ya se menciona en muchas sugerencias de código de Python:
def fn(*args):
for x in args:
dosomething
pero pensé que foreach todavía es bienvenido en base a los dos hechos:
- En casos normales, a las personas simplemente no les importa el rendimiento
- En algún momento, la API no aceptó el objeto iterable y no puede reescribir su fuente.
fuente
for
bucle?for
sirve.list.each(func)
es más limpio quefor item in list: func(item)
, en mi opinión. El problema es que Python ha hecho un buen trabajo al reemplazar los favoritos funcionales comomap()
yfilter()
con las comprensiones de listas que simplemente extienden su incorporadofor
yif
(que son homogéneos y legibles) y un específico.each()
podría ir en contra de eso.sum(0 for _ in map(f, seq))
es una solución legible.Respuestas:
Cada aparición de "foreach" que he visto (PHP, C #, ...) hace básicamente lo mismo que la declaración "for" de pitones.
Estos son más o menos equivalentes:
Entonces, sí, hay un "foreach" en python. Se llama "para".
Lo que estás describiendo es una función de "mapa de matriz". Esto podría hacerse con listas de comprensión en python:
fuente
Python no tiene una
foreach
declaración per se . Tienefor
bucles integrados en el lenguaje.Si realmente quisiera, podría definir su propia
foreach
función:Como nota al margen, la
for element in iterable
sintaxis proviene del lenguaje de programación ABC , una de las influencias de Python.fuente
map
de esta manera realmente no funcionará en Python 3, dondemap
es perezoso. Es decir, ahora devuelve un iterador, no una lista ya calculada. Los efectos secundarios no tendrán lugar hasta que repita la lista resultante.for
ciclo, y si el iterable es largo (quizás infinito) o los valores de retorno de la función son grandes, se rompe con aMemoryError
.for
bucle simple , así como listas de comprensiones.Otros ejemplos:
Python Foreach Loop:
Python para bucle:
fuente
map
puede usarse para la situación mencionada en la pregunta.P.ej
Para funciones que toman múltiples argumentos, se pueden dar más argumentos para mapear:
Devuelve una lista en python 2.xy un iterador en python 3
En caso de que su función tome múltiples argumentos y los argumentos ya estén en forma de tuplas (o cualquier iterable desde python 2.6) puede usar
itertools.starmap
. (que tiene una sintaxis muy similar a la que estaba buscando). Devuelve un iterador.P.ej
nos da 8 y 9
fuente
map
yforeach
tienen un significado diferente.map
devuelve una lista de resultados (lo que implica crear una lista, o una estructura enumerable, o una estructura que se consumirá, y por lo tanto no se llama de inmediato),foreach
llama a la función en cada elemento, ignorando el resultado.Foreach
debe devolver el resultado inmediatamente. Decir que se prefiere crear iteradores en lugar de foreach es una mierda total.map()
cuando se ignora el resultado es un antipatrón. Deberías usar un bucle for en su lugar.map
e ignorar los resultados producirá resultados no deseados en Python 3, yamap
que ahora se evalúa perezosamente solo cuando se consume la lista resultante. Si el resultado delmap
nunca se consume, las llamadas nunca se aplican.Esto hace el foreach en python 3
fuente
Sí, aunque usa la misma sintaxis que un bucle for.
fuente
forEach
Si lo entendí bien, quiere decir que si tiene una función 'func', desea verificar para cada elemento de la lista si func (item) devuelve verdadero; si te vuelves verdadero para todos, entonces haz algo.
Puedes usar 'todos'.
Por ejemplo: quiero obtener todos los números primos en el rango 0-10 en una lista:
fuente
Aquí está el ejemplo de la construcción "foreach" con acceso simultáneo a los índices de elementos en Python:
fuente
Mira este artículo . El objeto iterador nditer del paquete numpy , introducido en NumPy 1.6, proporciona muchas formas flexibles de visitar todos los elementos de una o más matrices de manera sistemática.
Ejemplo:
fuente
Si solo está buscando una sintaxis más concisa, puede colocar el bucle for en una línea:
Simplemente separe las declaraciones adicionales con un punto y coma.
Es posible que esto no se ajuste a su guía de estilo local, pero podría tener sentido hacerlo así cuando está jugando en la consola.
fuente
Creo que esto responde a su pregunta, porque es como un ciclo "para cada".
El siguiente script es válido en python (versión 3.8):
fuente