Quand je rencontre la situation, je peux le faire en javascript, je pense toujours que s'il y a une foreach
fonction, ce serait pratique. Par foreach, j'entends la fonction qui est décrite ci-dessous:
def foreach(fn,iterable):
for x in iterable:
fn(x)
ils le font juste 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 je manque juste quelques points ici?
Peut-être que je me suis trompé, car appeler une fonction en Python coûte cher, ce n'est certainement pas une bonne pratique pour l'exemple. Plutôt qu'une boucle de sortie, la fonction doit faire la boucle à côté de son corps ressemble à ceci ci-dessous, déjà mentionné dans de nombreuses suggestions de code de python:
def fn(*args):
for x in args:
dosomething
mais je pensais que foreach est toujours la bienvenue sur la base des deux faits:
- Dans les cas normaux, les gens ne se soucient tout simplement pas de la performance
- Parfois, l'API n'acceptait pas d'objet itérable et vous ne pouvez pas réécrire sa source.
la source
for
boucle?for
sert.list.each(func)
est plus propre que l'for item in list: func(item)
OMI. Le problème est que Python a fait du bon travail en remplaçant les favoris fonctionnels commemap()
etfilter()
par des listes de compréhension qui étendent simplement son intégréfor
etif
(qui sont homogènes et lisibles) et un spécifique.each()
pourrait aller à l'encontre de cela.sum(0 for _ in map(f, seq))
est une solution de contournement lisible.Réponses:
Chaque occurrence de "foreach" que j'ai vue (PHP, C #, ...) fait fondamentalement la même chose que l'instruction pythons "for".
Ce sont plus ou moins équivalents:
Donc, oui, il y a un "foreach" en python. Il s'appelle «pour».
Ce que vous décrivez est une fonction de «carte de tableau». Cela pourrait être fait avec des compréhensions de liste en python:
la source
Python n'a pas de
foreach
déclaration en soi . Il a desfor
boucles intégrées dans la langue.Si vous le souhaitez vraiment, vous pouvez définir votre propre
foreach
fonction:En
for element in iterable
passant, la syntaxe provient du langage de programmation ABC , l'une des influences de Python.la source
map
de cette manière ne fonctionnera pas vraiment dans Python 3 oùmap
est paresseux. Autrement dit, il renvoie maintenant un itérateur, pas une liste déjà calculée. Les effets secondaires ne se produiront pas tant que vous n'aurez pas parcouru la liste résultante.for
boucle, et si l'itérable est long (peut-être infini) ou si les valeurs de retour de la fonction sont grandes, cela rompt avec unMemoryError
.for
boucle simple fonctionne, ainsi que des compréhensions de liste.Autres exemples:
Boucle Python Foreach:
Python pour la boucle:
la source
map
peut être utilisé pour la situation mentionnée dans la question.Par exemple
Pour les fonctions qui prennent plusieurs arguments, plus d'arguments peuvent être donnés à mapper:
Il renvoie une liste en python 2.x et un itérateur en python 3
Dans le cas où votre fonction prend plusieurs arguments et que les arguments sont déjà sous la forme de tuples (ou de tout autre itérable depuis python 2.6), vous pouvez utiliser
itertools.starmap
. (qui a une syntaxe très similaire à ce que vous recherchiez). Il renvoie un itérateur.Par exemple
nous donne 8 et 9
la source
map
etforeach
ont une signification différente.map
renvoie une liste de résultat (ce qui implique de créer une liste, ou une structure énumérable, ou une structure qui sera consommée, et donc pas appelée tout de suite),foreach
appelle la fonction sur chaque élément, ignorant le résultat.Foreach
doit renvoyer le résultat immédiatement. Dire qu'il est préférable de créer un itérateur au lieu de foreach est une merde totale.map()
lorsque le résultat est ignoré est un anti-motif. Vous devriez utiliser une boucle for à la place.map
et ignorer les résultats produira des résultats indésirables dans Python 3 car ilmap
est maintenant évalué paresseusement uniquement lorsque la liste résultante est consommée. Si le résultat de l 'map
n'est jamais consommé, les appels ne sont jamais appliqués.Cela fait le foreach en python 3
la source
Oui, bien qu'il utilise la même syntaxe qu'une boucle for.
la source
forEach
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) renvoie true; si vous devenez vrai pour tous, faites quelque chose.
Vous pouvez utiliser «tout».
Par exemple: je veux obtenir tous les nombres premiers compris entre 0 et 10 dans une liste:
la source
Voici l'exemple de la construction "foreach" avec accès simultané aux index des éléments en Python:
la source
Regardez cet article . L'objet itérateur nditer du package numpy , introduit dans NumPy 1.6, fournit de nombreuses façons flexibles de visiter tous les éléments d'un ou plusieurs tableaux de manière systématique.
Exemple:
la source
Si vous recherchez simplement une syntaxe plus concise, vous pouvez mettre la boucle for sur une seule ligne:
Séparez simplement les instructions supplémentaires par un point-virgule.
Cela peut ne pas être conforme à votre guide de style local, mais il peut être judicieux de le faire ainsi lorsque vous jouez dans la console.
la source
Je pense que cela répond à votre question, car c'est comme une boucle «pour chaque».
Le script ci-dessous est valide en python (version 3.8):
la source