Каждый день я люблю Python все больше.
Сегодня, я писал некоторый код как:
for i in xrange(N):
do_something()
Я должен был сделать что-то времена N. Но каждый раз не зависел от значения i
(индексируйте переменную). Я понял, что создавал переменную, которую я никогда не использовал (i
), и я думал "Там, конечно, больше pythonic способа сделать это без потребности в той бесполезной индексной переменной".
Таким образом... вопрос: Вы знаете, как сделать эту простую задачу большим количеством (pythonic) красивого способа?
Немного более быстрый подход, чем цикл на xrange(N)
:
import itertools
for _ in itertools.repeat(None, N):
do_something()
Используйте переменную _, как я узнал, когда задавал этот вопрос, например:
# 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 эти идентификаторы не запоминают и не выделяют место, как это делают переменные в других языках. Об этом легко забыть. Это просто имена, указывающие на объекты, в данном случае на целое число на каждой итерации.
Предположим, что вы определили do_something как функцию и хотите выполнить ее N раз. Возможно, вы можете попробовать следующее:
todos = [do_something] * N
for doit in todos:
doit()
поскольку функция является первоклассным гражданином, вы можете написать небольшую оболочку (из ответов Алекса)
def repeat(f, N):
for _ in itertools.repeat(None, N): f()
, тогда вы можете передать функцию в качестве аргумента.