210 votes

Existe-t-il une fonction 'foreach' dans Python 3 ?

Lorsque je rencontre la situation où je peux le faire en javascript, je pense toujours que s'il y a une foreach fonction, ce serait une commodité. Par foreach, j'entends la fonction qui est décrite ci-dessous :

def foreach(fn,iterable):
    for x in iterable:
        fn(x)

ils l'ont juste fait sur chaque élément et n'ont pas donné ou retourné quelque chose, je pense que cela devrait être une fonction intégrée et devrait être plus rapide que de l'écrire avec du Python pur, mais je ne l'ai pas trouvé sur la liste, ou il a juste appelé un autre nom ? ou j'ai juste manqué quelques points ici ?

Peut-être que je me suis trompé, car appeler une fonction en Python coûte cher, ce qui n'est certainement pas une bonne pratique pour l'exemple. Plutôt qu'une boucle de sortie, la fonction devrait faire une boucle d'entrée, son corps ressemble à ce qui suit, déjà mentionné dans de nombreuses suggestions de code Python :

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

mais je pensais que foreach était toujours le bienvenu sur la base des deux faits :

  1. Dans la plupart des cas, les gens ne se soucient pas de la performance.
  2. Parfois, l'API n'accepte pas l'objet itérable et vous ne pouvez pas réécrire sa source.

7voto

Caveman Points 469

Oui, bien qu'il utilise la même syntaxe qu'une boucle for.

for x in ['a', 'b']: print(x)

6voto

simhumileco Points 5383

Voici l'exemple de la construction "foreach" avec l'accès simultané à la indices d'éléments en Python :

for idx, val in enumerate([3, 4, 5]):
    print (idx, val)

5voto

veera sai Points 102

Ceci fait le foreach en python 3

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

for fetch in test:
    print(fetch)

3voto

foo bar Points 747

Mira cet article . L'objet itérateur nditer de numpy introduit dans NumPy 1.6, offre de nombreux moyens flexibles de visiter tous les éléments d'un ou plusieurs tableaux de manière systématique.

Exemple :

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]]

2voto

Be'ezrat Hashem Points 51

Si je vous ai bien compris, vous voulez dire que si vous avez une fonction 'func', vous voulez vérifier pour chaque élément de la liste si func(item) retourne vrai ; si vous obtenez vrai pour tous, alors faites quelque chose.

Vous pouvez utiliser "tous".

Par exemple : Je veux obtenir tous les nombres premiers de la plage 0-10 dans une liste :

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))]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X