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.

2voto

ET-13 Points 21

Je sais que c'est un vieux sujet mais j'ai eu une question similaire en essayant de faire un exercice Codewars.

J'ai trouvé une solution qui imbrique les boucles, je pense que cette solution s'applique à la question, elle reproduit une déclaration "for each (x) doThing" qui fonctionne dans la plupart des scénarios :

for elements in array:
    while elements in array:

        array.func()

1voto

aris Points 187

Si vous recherchez une syntaxe plus concise, vous pouvez mettre l'option pour sur une ligne :

array = ['a', 'b']
for value in array: print(value)

Il suffit de séparer les déclarations supplémentaires par un point-virgule.

array = ['a', 'b']
for value in array: print(value); print('hello')

Cela n'est peut-être pas conforme à votre guide de style local, mais il peut être utile de procéder ainsi lorsque vous jouez dans la console.

1voto

AutomatedMike Points 510

Si tu veux vraiment, tu peux le faire :

[fn(x) for x in iterable]

Mais le but de la compréhension de liste est de créer une liste - l'utiliser pour le seul effet secondaire est un mauvais style. La boucle for est également moins typée

for x in iterable: fn(x)

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