Quando encontro a situação, posso fazê-lo em javascript, sempre acho que, se houver uma foreach
função, seria conveniente. Por foreach, quero dizer a função que é descrita abaixo:
def foreach(fn,iterable):
for x in iterable:
fn(x)
eles apenas fazem isso em todos os elementos e não produzem ou retornam algo, acho que deve ser uma função interna e deve ser mais rápida do que escrevê-la com Python puro, mas não a encontrei na lista, ou acabou de chamar outro nome? ou eu só sinto falta de alguns pontos aqui?
Talvez eu tenha me enganado, porque chamar uma função em Python custa alto, definitivamente não é uma boa prática para o exemplo. Em vez de um loop out, a função deve executar o loop no lado em que seu corpo se parece com este abaixo, que já foi mencionado nas sugestões de código de muitas python:
def fn(*args):
for x in args:
dosomething
mas pensei que foreach ainda é bem-vindo com base nos dois fatos:
- Em casos normais, as pessoas simplesmente não se importam com o desempenho
- Às vezes, a API não aceita objetos iteráveis e você não pode reescrever sua origem.
fonte
for
loop?for
para isso.list.each(func)
é mais limpo do quefor item in list: func(item)
IMO. O problema é que Python tem feito um bom trabalho de substituição de favoritos funcionais comomap()
efilter()
com compreensões lista que simplesmente estender a sua built-infor
eif
(que são homogêneos e legível) e uma específica.each()
pode ir contra isso.sum(0 for _ in map(f, seq))
é uma solução legível.Respostas:
Toda ocorrência de "foreach" que eu vi (PHP, C #, ...) faz basicamente o mesmo que a declaração "for".
Estes são mais ou menos equivalentes:
Então, sim, existe um "foreach" em python. É chamado "para".
O que você está descrevendo é uma função "mapa de matriz". Isso pode ser feito com a compreensão da lista em python:
fonte
Python não possui uma
foreach
declaração propriamente dita . Possuifor
loops embutidos no idioma.Se você realmente quisesse, poderia definir sua própria
foreach
função:Como observação lateral, a
for element in iterable
sintaxe vem da linguagem de programação ABC , uma das influências do Python.fonte
map
dessa maneira não funcionará realmente no Python 3, ondemap
é preguiçoso. Ou seja, agora ele retorna um iterador, não uma lista já calculada. Os efeitos colaterais não ocorrerão até que você percorra a lista resultante.for
loop e, se o iterável for longo (talvez infinito) ou os valores de retorno da função forem grandes, ele será quebrado com aMemoryError
.for
loop simples , bem como a compreensão de listas.Outros exemplos:
Loop de Python Foreach:
Python para loop:
fonte
map
pode ser usado para a situação mencionada na pergunta.Por exemplo
Para funções que recebem vários argumentos, mais argumentos podem ser dados para mapear:
Retorna uma lista no python 2.xe um iterador no python 3
Caso sua função aceite vários argumentos e os argumentos já estejam na forma de tuplas (ou qualquer iterável desde o python 2.6), você pode usar
itertools.starmap
. (que tem uma sintaxe muito semelhante à que você estava procurando). Retorna um iterador.Por exemplo
nos dá 8 e 9
fonte
map
eforeach
tem um significado diferente.map
retorna uma lista de resultado (que implica criar uma lista ou uma estrutura enumerável ou uma estrutura que será consumida e, portanto, não chamada imediatamente),foreach
chama a função em cada item, ignorando o resultado.Foreach
deve retornar o resultado imediatamente. Dizer que criar iterador em vez de foreach é o preferido é uma porcaria total.map()
quando o resultado é ignorado é um antipadrão. Você deve usar um loop for.map
e ignorar os resultados produzirá resultados indesejados no Python 3, poismap
agora é avaliado preguiçosamente apenas quando a lista resultante é consumida. Se o resultado domap
nunca for consumido, as chamadas nunca serão aplicadas.Isso faz o foreach em python 3
fonte
Sim, embora use a mesma sintaxe que um loop for.
fonte
forEach
Se eu entendi direito, você quer dizer que, se tiver uma função 'func', deseja verificar cada item da lista se func (item) retornar true; se você for verdadeiro para todos, faça alguma coisa.
Você pode usar 'todos'.
Por exemplo: quero obter todos os números primos no intervalo de 0 a 10 em uma lista:
fonte
Aqui está o exemplo da construção "foreach" com acesso simultâneo aos índices do elemento no Python:
fonte
Veja este artigo . O iterador de objetos nditer do pacote numpy , introduzido no NumPy 1.6, oferece muitas maneiras flexíveis de visitar todos os elementos de uma ou mais matrizes de maneira sistemática.
Exemplo:
fonte
Se você está apenas procurando uma sintaxe mais concisa, pode colocar o loop for em uma linha:
Apenas separe as instruções adicionais com um ponto e vírgula.
Isso pode não estar em conformidade com o guia de estilo local, mas pode fazer sentido assim quando você está brincando no console.
fonte
Eu acho que isso responde à sua pergunta, porque é como um loop "para cada".
O script abaixo é válido em python (versão 3.8):
fonte