Ответ 1
Немного более быстрый подход, чем цикл на xrange(N)
:
import itertools
for _ in itertools.repeat(None, N):
do_something()
Каждый день я люблю питона все больше и больше.
Сегодня я писал код вроде:
for i in xrange(N):
do_something()
Мне нужно было что-то N раз. Но каждый раз не зависел от значения i
(индексная переменная).
Я понял, что создаю переменную, которую я никогда не использовал (i
), и я подумал: "Конечно, это более питонический способ сделать это без необходимости в этой бесполезной индексной переменной".
Итак... вопрос: знаете ли вы, как сделать эту простую задачу более красивым способом (pythonic)?
Немного более быстрый подход, чем цикл на xrange(N)
:
import itertools
for _ in itertools.repeat(None, N):
do_something()
Используйте переменную _, как я узнал, когда я спросил об этом question, например:
# A long way to do integer exponentiation
num = 2
power = 3
product = 1
for _ in xrange(power):
product *= num
print product
Я просто использую for _ in range(n)
, это прямо в точку. Он собирается генерировать весь список для огромных чисел в Python 2, но если вы используете Python 3, это не проблема.
То же самое, что и x. Однако это идиома python, которая использовала для обозначения идентификатора, который вы не собираетесь использовать. В python эти идентификаторы не записывают или не выделяют пространство, как переменные, на других языках. Легко забыть об этом. Они - просто имена, указывающие на объекты, в этом случае целое число на каждой итерации.
поскольку функция является первоклассной гражданином, вы можете написать небольшую обертку (из ответов Алекса)
def repeat(f, N):
for _ in itertools.repeat(None, N): f()
то вы можете передать функцию в качестве аргумента.
Предположим, что вы определили do_something как функцию и хотите выполнить ее N. Возможно, вы можете попробовать следующее:
todos = [do_something] * N
for doit in todos:
doit()
Как насчет простого цикла while?
while times > 0:
do_something()
times -= 1
У вас уже есть переменная; почему бы не использовать его?