loop index for python python-3.x foreach

index - range python



¿Hay una función ''foreach'' en Python 3? (7)

Cuando me encuentro con la situación, puedo hacerlo en JavaScript, siempre pienso que si hay una función foreach 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 ceden ni 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 ¿Acaba de llamar otro nombre? ¿O simplemente extraño algunos puntos aquí?

Tal vez me equivoqué, porque llamar a una función en Python cuesta caro, definitivamente no es una buena práctica para el ejemplo. En lugar de un bucle de salida, la función debería hacer el bucle en el costado de su cuerpo, como se ve a continuación, que ya se mencionó en muchas sugerencias de código de python:

def fn(*args): for x in args: dosomething

pero pensé que foreach aún es bienvenido en base a los dos hechos:

  1. En casos normales, a la gente simplemente no le importa el rendimiento
  2. En algún momento, la API no aceptaba objetos iterables y no puede reescribir su fuente.

Cada ocurrencia de "foreach" que he visto (PHP, C #, ...) hace básicamente lo mismo que las pitones "para" la declaración.

Estos son más o menos equivalentes:

// PHP: foreach ($array as $val) { print($val); } // C# foreach (String val in array) { console.writeline(val); } // Python for val in array: print(val)

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:

names = [''tom'', ''john'', ''simon''] namesCapitalized = [capitalize(n) for n in names]


Esto hace el foreach en python 3

prueba = [0,1,2,3,4,5,6,7,8, "prueba"]

for fetch in test: print(fetch)


Mira este artículo . El objeto iterador nditer del paquete numpy , presentado en NumPy 1.6, proporciona muchas formas flexibles de visitar todos los elementos de una o más matrices de forma sistemática.

Ejemplo:

import random import numpy as np ptrs = np.int32([[0, 0], [400, 0], [0, 400], [400, 400]]) for ptr in np.nditer(ptrs, op_flags=[''readwrite'']): # apply random shift on 1 for each element of the matrix ptr += random.choice([-1, 1]) print(ptrs) d:/>python nditer.py [[ -1 1] [399 -1] [ 1 399] [399 401]]


Otros ejemplos:

Python Foreach Loop:

for val in array: print(val)

Python For Loop:

for index in range(len(array)): print(array[index]) index+= 1


Python no tiene una declaración foreach per se . Tiene for bucles integrados en el lenguaje.

for element in iterable: operate(element)

Si realmente quisiera, podría definir su propia función foreach :

def foreach(function, iterable): for element in iterable: function(element)

Como nota al margen, el for element in iterable sintaxis for element in iterable proviene del lenguaje de programación ABC , una de las influencias de Python.


Si te entendí bien, te refieres a que si tienes una función ''func'', quieres verificar cada ítem en la lista si func (ítem) devuelve verdadero; si te vuelves verdadero para todos, entonces haz algo.

Puedes usar ''todo''.

Por ejemplo: quiero obtener todos los números primos en el rango 0-10 en una lista:

from math import sqrt primes = [x for x in range(10) if x > 2 and all(x % i !=0 for i in range(2, int(sqrt(x)) + 1))]


map es preferido en la mayoría de los casos para la situación mencionada en la pregunta.

P.ej

map(len, [''abcd'',''abc'', ''a'']) # 4 3 1

Para funciones que toman múltiples argumentos, se pueden dar más argumentos al mapa:

map(pow, [2, 3], [4,2]) # 16 9

Devuelve una lista en python 2.xy un iterador en python 3

En caso de que su función tome varios 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 lo que estabas buscando). Devuelve un iterador.

P.ej

for num in starmap(pow, [(2,3), (3,2)]): print(num)

nos da 8 y 9