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

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

Сегодня, я писал некоторый код как:

for i in xrange(N):
    do_something()

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

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

143
задан Ciro Santilli 新疆改造中心法轮功六四事件 24 November 2015 в 21:00
поделиться

6 ответов

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

import itertools

for _ in itertools.repeat(None, N):
    do_something()
102
ответ дан 23 November 2019 в 23:00
поделиться

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

# A long way to do integer exponentiation
num = 2
power = 3
product = 1
for _ in xrange(power):
    product *= num
print product
52
ответ дан 23 November 2019 в 23:00
поделиться

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

34
ответ дан 23 November 2019 в 23:00
поделиться

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

9
ответ дан 23 November 2019 в 23:00
поделиться

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

todos = [do_something] * N  
for doit in todos:  
    doit()
4
ответ дан 23 November 2019 в 23:00
поделиться

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

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

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

9
ответ дан 23 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: