any, in a nutshell, allow you to do the equivalent of
or respectively but on an entire list.* So, in the most basic case, here's how they work:
>>> print all([True, True, True, False, True, True]) False >>> print any([True, True, True, False, True, True]) True
The first example isn't true because in not all of the list is True, the second example is True because at least one of the list is True. You could rewrite this to an if comparison, e.g.:
>>> print "True" if (True and True and True and False and True and True) else "False" False >>> if (True or True or True or False or True or True): print "True" True
so this can be a really useful way to check a whole list of values and then use them. Further, you can check them all in one line and then work with the data, etc.
any short-circuit, so if it's important that *every* operation in a list of operations is completed, calculate the list first, THEN check it with
>>> q = Queue(50) >>> print any([q.enqueue(1), q.enqueue(2) ... q.enqueue(50)]) True >>> print q.size 1
The operation short-circuits (stops) after the first True value (or, for any, the first False value). If you just calculate the list first, then use
all on it, you'll be all good. E.g.
>>> q = Queue(5) >>> results = [q.enqueue(1), q.enqueue(2), q.enqueue(3)] >>> print any(results) True >>> print q.size 3
Specifically, they take an iterable that produces elements and they both short-circuit (check out the all to see an equivalent-code example in Python, but for right now easier and simpler to talk about lists specifically.
What's the difference? It means that you don't have to instantiate a list first, you can just give it a generator expression (or any iterable), e.g.
def counting_generator(): counting_generator.count += 1 if counting_generator.count < 100: yield True # given counting_generator its counter counting_generator.count = 0 >>> print "The result was %r and produced %d items" % (any(counting_generator()), counting_generator.count) The result was True and produced 1 items. >>> counting_generator.count = 0 >>> # if you don't include the if statement this will be an infinite loop! >>> print "The result was %r and produced %d items" % (all(counting_generator()), counting_generator.count) The result was True and produced 100 items.