Pythonic способ сделать что-то N раз без индексной переменной?

Каждый день я люблю питона все больше и больше.

Сегодня я писал код вроде:

for i in xrange(N):
    do_something()

Мне нужно было что-то N раз. Но каждый раз не зависел от значения i (индексная переменная). Я понял, что создаю переменную, которую я никогда не использовал (i), и я подумал: "Конечно, это более питонический способ сделать это без необходимости в этой бесполезной индексной переменной".

Итак... вопрос: знаете ли вы, как сделать эту простую задачу более красивым способом (pythonic)?

Ответ 1

Немного более быстрый подход, чем цикл на xrange(N):

import itertools

for _ in itertools.repeat(None, N):
    do_something()

Ответ 2

Используйте переменную _, как я узнал, когда я спросил об этом question, например:

# A long way to do integer exponentiation
num = 2
power = 3
product = 1
for _ in xrange(power):
    product *= num
print product

Ответ 3

Я просто использую for _ in range(n), это прямо в точку. Он собирается генерировать весь список для огромных чисел в Python 2, но если вы используете Python 3, это не проблема.

Ответ 4

То же самое, что и x. Однако это идиома python, которая использовала для обозначения идентификатора, который вы не собираетесь использовать. В python эти идентификаторы не записывают или не выделяют пространство, как переменные, на других языках. Легко забыть об этом. Они - просто имена, указывающие на объекты, в этом случае целое число на каждой итерации.

Ответ 5

поскольку функция является первоклассной гражданином, вы можете написать небольшую обертку (из ответов Алекса)

def repeat(f, N):
    for _ in itertools.repeat(None, N): f()

то вы можете передать функцию в качестве аргумента.

Ответ 6

Предположим, что вы определили do_something как функцию и хотите выполнить ее N. Возможно, вы можете попробовать следующее:

todos = [do_something] * N  
for doit in todos:  
    doit()

Ответ 7

Как насчет простого цикла while?

while times > 0:
    do_something()
    times -= 1

У вас уже есть переменная; почему бы не использовать его?