Quand je rencontre la situation, je peux le faire en javascript, je pense toujours que s'il y a une fonction foreach
, ce serait pratique. Par foreach je veux dire 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 l'écrire avec du Python pur, mais je ne l'ai pas trouvé sur la liste, ou il vient d'appeler un autre nom - ou je manque juste quelques points ici?
Peut-être que je me suis trompé, car appeler une fonction dans Python coûte cher, ce n'est certainement pas une bonne pratique pour l'exemple. Plutôt qu'une boucle de sortie, la fonction devrait faire la boucle de côté. Son corps ressemble à ceci ci-dessous, ce qui a déjà été mentionné dans de nombreuses suggestions de code de python:
def fn(*args):
for x in args:
dosomething
mais je pensais que foreach est toujours le bienvenu sur la base de deux faits:
Chaque occurrence de "foreach" que j'ai vue (PHP, C #, ...) est fondamentalement la même chose que pythons "pour".
Ce sont plus ou moins équivalents:
// PHP:
foreach ($array as $val) {
print($val);
}
// C#
foreach (String val in array) {
console.writeline(val);
}
// Python
for val in array:
print(val)
Donc, oui, il y a un "foreach" en python. Ça s'appelle "pour".
Ce que vous décrivez est une fonction "carte de tableau". Cela pourrait être fait avec liste compréhensions en python:
names = ['tom', 'john', 'simon']
namesCapitalized = [capitalize(n) for n in names]
Python n'a pas d'instruction foreach
en soi . Il a for
boucles intégrées dans le langage.
for element in iterable:
operate(element)
Si vous le souhaitez vraiment, vous pouvez définir votre propre fonction foreach
:
def foreach(function, iterable):
for element in iterable:
function(element)
Notons que la syntaxe for element in iterable
provient du langage de programmation ABC , l'une des influences de Python.
Autres exemples:
Boucle Foreach Python:
array = ['a', 'b']
for value in array:
print(value)
# a
# b
Python pour la boucle:
array = ['a', 'b']
for index in range(len(array)):
print("index: %s | value: %s" % (index, array[index]))
# index: 0 | value: a
# index: 1 | value: b
map
peut être utilisé pour la situation mentionnée dans la question.
Par exemple.
_map(len, ['abcd','abc', 'a']) # 4 3 1
_
Pour les fonctions qui prennent plusieurs arguments, plusieurs arguments peuvent être donnés pour mapper:
_map(pow, [2, 3], [4,2]) # 16 9
_
Il retourne une liste dans python 2.x et un itérateur dans 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 élément itérable depuis python 2.6), peut utiliser itertools.starmap
. (qui a une syntaxe très similaire à celle que vous recherchiez). Il retourne un itérateur.
Par exemple.
_for num in starmap(pow, [(2,3), (3,2)]):
print(num)
_
nous donne 8 et 9
Si je vous ai bien compris, vous voulez dire que si vous avez une fonction 'func', vous voulez vérifier chaque élément de la liste si func (item) renvoie la valeur true; si vous devenez vrai pour tous, faites quelque chose.
Vous pouvez utiliser "tous".
Par exemple: je veux obtenir tous les nombres premiers compris entre 0 et 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))]
Si vous cherchez simplement une syntaxe plus concise, vous pouvez mettre la boucle pour sur une seule ligne:
array = ['a', 'b']
for value in array: print(value)
Séparez simplement les instructions supplémentaires par un point-virgule.
array = ['a', 'b']
for value in array: print(value); print('hello')
Cela peut ne pas être conforme à votre guide de style local, mais il peut être judicieux de le faire comme ceci lorsque vous jouez dans la console.
Cela fait foreach dans python 3
test = [0,1,2,3,4,5,6,7,8,"test"]
for fetch in test:
print(fetch)
Regardez cet article . L’objet itérateur nditer du paquet numpy , introduit dans NumPy 1.6, fournit de nombreuses manières flexibles de visiter systématiquement tous les éléments d’un ou de plusieurs tableaux.
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]]