Вопрос предполагает, что вызов foo () n раз является априори необходимостью. Откуда взялось? Это длина чего-то повторяемого? Затем выполните итерацию по итерации. Когда я беру в руки Python, я обнаружил, что использую несколько или совсем не использую произвольных значений; за вашим n есть еще один важный смысл, который потерялся, когда стал целым числом.
Сегодня я наткнулся на провокационную статью Никлауса Вирта для IEEE Computer под названием Хорошие идеи - в Зазеркалье (архивная версия для будущих читателей). В разделе 4 он привносит другой взгляд на программные конструкции, которые все (включая его самого) считают само собой разумеющимся, но которые содержат явные недостатки:
«Общность оператора Algol
for
должна иметь был предупреждением для всех будущих дизайнеров всегда помнить об основной цели конструкции и уставать от преувеличенной общности и сложности, что может легко стать контрпродуктивным ".
Алгол для
эквивалентен C / Java для
, но он тоже много. Эту статью полезно читать хотя бы потому, что она заставляет не принимать как должное столько того, что мы с такой готовностью делаем. Так что, возможно, лучший вопрос: «Зачем вам нужен цикл, который выполняется произвольное количество раз?»
Самый быстрый и чистый - это itertools.repeat :
import itertools
for _ in itertools.repeat(None, n):
foo()
Если вам нужен метод раз
, и вам нужно использовать его в своих собственных функциях, попробуйте следующее:
def times(self, n, *args, **kwargs):
for _ in range(n):
self.__call__(*args, **kwargs)
import new
def repeatable(func):
func.times = new.instancemethod(times, func, func.__class__)
return func
теперь добавьте декоратор @repeatable
для любого метода, который вам нужен, метод раз
на:
@repeatable
def foo(bar):
print bar
foo.times(4, "baz") #outputs 4 lines of "baz"
Вы уже показали идиоматический путь:
for _ in range(n): # or xrange if you are on 2.X
foo()
Не уверен, что в этом «хакерского». Если вы имеете в виду более конкретный вариант использования, предоставьте более подробную информацию, и может быть что-то более подходящее для того, что вы делаете.