Todos os dias eu amo python cada vez mais.
Hoje, eu estava escrevendo um código como:
for i in xrange(N):
do_something()
Eu tive que fazer algo N vezes. Mas cada vez que não dependia do valor dei
(variável de índice). Percebi que estava criando uma variável que nunca usei ( i
) e pensei: "Certamente há uma maneira mais pitônica de fazer isso sem a necessidade dessa variável de índice inútil".
Então ... a pergunta é: você sabe como fazer essa tarefa simples de uma maneira mais bonita (pitônica)?
coding-style
for-loop
python
Manuel Aráoz
fonte
fonte
range
vez disso.Respostas:
Uma abordagem um pouco mais rápida do que a repetição
xrange(N)
é:fonte
Use a variável _, como aprendi quando fiz essa pergunta , por exemplo:
fonte
Eu apenas uso
for _ in range(n)
, é direto ao ponto. Ele irá gerar a lista inteira para grandes números no Python 2, mas se você estiver usando o Python 3, não será um problema.fonte
como a função é um cidadão de primeira classe, você pode escrever um pequeno invólucro (das respostas de Alex)
então você pode passar a função como argumento.
fonte
_ É a mesma coisa que x. No entanto, é um idioma python usado para indicar um identificador que você não pretende usar. Em python, esses identificadores não ocupam memória ou alocam espaço, como as variáveis em outros idiomas. É fácil esquecer isso. Eles são apenas nomes que apontam para objetos, neste caso, um número inteiro em cada iteração.
fonte
Achei as várias respostas realmente elegantes (principalmente as de Alex Martelli), mas queria quantificar o desempenho em primeira mão, então preparei o seguinte script:
Eu também vim com uma solução alternativa que se baseia na de Martelli e usa
map()
para chamar a função de carga útil. OK, enganei-me um pouco porque tive a liberdade de fazer a carga aceitar um parâmetro que é descartado: não sei se há uma maneira de contornar isso. No entanto, aqui estão os resultados:portanto, o uso do mapa gera uma melhoria de aproximadamente 30% sobre o padrão para loop e de 19% extra sobre o Martelli.
fonte
Suponha que você definiu do_something como uma função e gostaria de executá-lo N vezes. Talvez você possa tentar o seguinte:
fonte
fn() for fn in itertools.repeat(do_something, N)
e salvar pré-gerar a matriz ... esse é o meu idioma preferido.Que tal um loop while simples?
Você já tem a variável; por que não usá-lo?
fonte