Pourquoi pas?
while BoolIter(N, default=True, falseIndex=N-1):
print 'some thing'
ou d'une manière plus laid:
for _ in BoolIter(N):
print 'doing somthing'
ou si vous voulez attraper la dernière fois par:
for lastIteration in BoolIter(N, default=False, trueIndex=N-1):
if not lastIteration:
print 'still going'
else:
print 'last time'
où:
class BoolIter(object):
def __init__(self, n, default=False, falseIndex=None, trueIndex=None, falseIndexes=[], trueIndexes=[], emitObject=False):
self.n = n
self.i = None
self._default = default
self._falseIndexes=set(falseIndexes)
self._trueIndexes=set(trueIndexes)
if falseIndex is not None:
self._falseIndexes.add(falseIndex)
if trueIndex is not None:
self._trueIndexes.add(trueIndex)
self._emitObject = emitObject
def __iter__(self):
return self
def next(self):
if self.i is None:
self.i = 0
else:
self.i += 1
if self.i == self.n:
raise StopIteration
if self._emitObject:
return self
else:
return self.__nonzero__()
def __nonzero__(self):
i = self.i
if i in self._trueIndexes:
return True
if i in self._falseIndexes:
return False
return self._default
def __bool__(self):
return self.__nonzero__()
Upvoting pour pour compenser les votes négatifs: si Lionel pose cette question, d'autres J'ai la même question, et les réponses ci-dessous seront utiles. – EOL
Le terme "Pythonic" est en cours d'utilisation. C'est synonyme de "lisible" et "facilement compréhensible". En Python, au moins. – darioo
Copie possible de [Est-il possible d'implémenter une boucle Python pour une plage sans une variable d'itérateur?] (Http://stackoverflow.com/questions/818828/is-it-possible-to-implement-a-python-for- range-loop-without-an-iterator-variable) –