Is there a meaningful difference between these two?
class StatefulPredicate:
state = None # Something initial.
def __call__(self, arg) -> bool:
previous = self.state
self.state = arg # Something based on arg.
return arg != previous # Something based on previous and arg.
print(list(itertools.takewhile(StatefulPredicate(), [1, 2, 3, 3, 4])))
def stateful_predicate():
def predicate(arg) -> bool:
previous = predicate.state
predicate.state = arg # Something based on arg.
return arg != previous # Something based on previous and arg.
predicate.state = None # Something initial.
return predicate
print(list(itertools.takewhile(stateful_predicate(), [1, 2, 3, 3, 4])))
I find the former more intuitive.