Est-il un 'foreach' fonction en Python 3?
Quand je rencontre la situation, je peux le faire en javascript, j'ai toujours pense que si il y a un foreach
fonction il serait commodité. Par foreach, je veux dire la fonction qui est décrit ci-dessous:
def foreach(fn,iterable):
for x in iterable:
fn(x)
ils ont juste le faire sur chaque élément et n'a pas de rendement ou de retourner quelque chose,je pense qu'il devrait être intégré dans la fonction et devrait être plus rapide que l'écriture par pure Python, mais je n'ai pas trouvé sur la liste,ou c'est juste appelé d'un autre nom?ou je viens de rater quelques points ici?
Peut-être que j'ai tort, causer de l'appel d'une fonction en Python coût élevé, certainement pas une bonne pratique pour l'exemple. Plutôt qu'une boucle, la fonction doit faire la boucle dans le côté de son corps ressemble à ceci ci-dessous qui est déjà mentionné dans de nombreux python code suggestions:
def fn(*args):
for x in args:
dosomething
mais j'ai pensé foreach est toujours la bienvenue de base sur les deux faits:
- Dans la plupart des cas, les gens ne se soucient pas de la performance
- Un jour de l'API n'a pas accepté objet itérable et vous ne pouvez pas réécrire sa source.
- Quel est le problème avec juste l'aide d'un
for
boucle? - C'est exactement ce que
for
est pour. - rien de mal à pour la boucle ,juste pour des raisons de commodité
- il est souhaitable de disposer d'un raccourci pour appeler une fonction à la fois par élément d'une liste.
list.each(func)
est plus propre quefor item in list: func(item)
, de l'OMI. Le problème est que Python a fait un bon travail de remplacement fonctionnel favoris commemap()
etfilter()
avec des interprétations de la liste, qui se contente de prolonger son haut-for
etif
(qui sont homogènes et lisible) et une.each()
pourrait aller à l'encontre de cela. sum(0 for _ in map(f, seq))
est lisible une solution de contournement.
Vous devez vous connecter pour publier un commentaire.
Chaque occurence de "foreach" j'ai vu (PHP, C#, ...) n'est fondamentalement la même que les pythons "pour" instruction.
Ceux-ci sont plus ou moins équivalentes:
Donc, oui, il y a un "foreach" en python. Il est appelé "pour".
Ce que vous décrivez est un "tableau de la carte" de la fonction. Cela pourrait être fait avec interprétations de la liste en python:
foreach($array as key=>$value)
en python?Python n'est pas un
foreach
déclaration soi. Il afor
boucles construit dans la langue.Si tu le voulais vraiment, vous pouvez définir votre propre
foreach
fonction:Comme une note de côté la
for element in iterable
syntaxe vient de l'ABC langage de programmation, un de Python influences.map
de cette manière n'est pas vraiment d'aller travailler en Python 3, oùmap
est paresseux. C'est, maintenant retourne un itérateur, pas un déjà calculé de la liste. Les effets secondaires n'aura pas lieu jusqu'à ce que vous itérer sur la liste résultante.for
boucle, et si l'itérable est long (peut-être à l'infini) ou le retour de la fonction valeurs sont importantes, elle rompt avec unMemoryError
.for
boucle fonctionne, ainsi que des interprétations de la liste.map
etforeach
sont deux différentes abstractions.map
est censé renvoyer une nouvelle valeur toutforeach
retourne aucune valeur. Je suppose que la première instruction de votre réponse conduit à une voix.D'autres exemples:
Python Boucle Foreach:
Python La Boucle For:
map
peut être utilisé pour la situation mentionnée dans la question.E. g.
Pour des fonctions à plusieurs arguments, plusieurs arguments peuvent être donnés à la carte:
Elle retourne une liste en python 2.x et un itérateur en python 3
Dans le cas où votre fonction prend plusieurs arguments et les arguments sont déjà sous la forme de n-uplets (ou tout objet iterable depuis la version 2.6 de python), vous pouvez utiliser
itertools.starmap
. (qui a une syntaxe très semblable à ce que vous recherchez). Elle retourne un itérateur.E. g.
nous donne 8 et 9
map
etforeach
avoir une signification différente.map
renvoie la liste de résultat (ce qui implique la création d'une liste, ou une énumération ou une structure d'une structure qui sera consommé, et donc pas appelé tout de suite),foreach
appels de fonction sur chaque élément, en ignorant le résultat.Foreach
doit retourner le résultat imediately. En disant que la création d'itérateur au lieu de foreach est préféré est la merde totale.map()
lorsque le résultat est ignoré, c'est un anti-modèle. Vous devez utiliser une boucle for à la place.map
et d'ignorer les résultats de produire des résultats indésirables en Python 3 depuismap
est maintenant paresseusement évaluée uniquement lorsque la liste est consommé. Si le résultat de lamap
n'est jamais consommée, les appels ne sont jamais appliquées.Si j'ai bien compris vous avez droit, vous dire que si vous avez une fonction "func", vous voulez vérifier pour chaque élément dans la liste si func(item) retourne true; si vous obtenez la vraie pour tous, de faire quelque chose.
Vous pouvez utiliser "tous".
Par exemple: je veux obtenir tous les nombres premiers dans la gamme de 0 à 10 dans une liste:
Cela ne le foreach en python 3
Regarder cet article. L'itérateur objet nditer de numpy paquet, introduit dans NumPy 1.6, fournit de nombreux moyens flexibles pour visiter tous les éléments d'un ou de plusieurs tableaux de manière systématique.
Exemple:
Si vous êtes simplement à la recherche d'une syntaxe plus concise, vous pouvez mettre le pour boucle sur une seule ligne:
Juste séparer les déclarations supplémentaires avec un point-virgule.
Cela peut ne pas être conforme à votre guide de style, mais il pourrait être intéressant de le faire comme lorsque vous êtes à jouer dans la console.
Oui, bien qu'il utilise la même syntaxe d'une boucle for.