[Tutor] Built In Functions
spir
denis.spir at gmail.com
Mon Dec 16 20:23:13 CET 2013
On 12/16/2013 04:28 PM, Rafael Knuth wrote:
> Hey there,
>
> I am currently looking into all built in functions in Python 3.3.0,
> one by one, in order to understand what each of them specifically does
> (I am familiar with some of them already, but most built in functions
> are still alien to me). I am working with the Python documentation
> http://docs.python.org/3/library/functions.html#all but not all
> examples are clear & self explaining to me as a novice to programming.
>
> First question: all(iterable) and any(iterable) - can you give me one
> or two examples what these functions do and how they are specifically
> used?
>
> Thank you!
'all' and 'any' only are a bit obscure because of their actual implementation.
The intent is of functions that say whether all items (or each or every), or any
item (or some), in a list or any other "iterable" (sequence) satisfy a
criterion. This is very much like the modal operators "for each" (an 'A' upside
down) and "there exists" (an 'E' upside down) in mathematical logic. The logic
(sic!) would thus be like:
def every (collection, criterion):
for item in collection:
if not criterion(item):
return False
return True
def some (collection, criterion):
for item in collection:
if criterion(item):
return True
return False
def is_odd (n): return (n%2 == 1) # our criterion
l1 = [1,3,5,7,9]
l2 = [2,4,5,7,8]
l3 = [2,4,6,8]
print(every(l1, is_odd))
print(every(l2, is_odd))
print(every(l3, is_odd))
print(some(l1, is_odd))
print(some(l2, is_odd))
print(some(l3, is_odd))
==>
True
False
False
True
True
False
For each item, we first get a logical value telling whether it satisfies the
criterion. Then, we operate on this result -- differently for each function.
However, Python's 'all' and 'any' actually operate on sequences that are
supposed to _already_ contain boolean (logical) value; as if the sequences,
instead of holding their original items, were already converted into derived
sequences holding the results of applying the criterion. We could do this using
either map or comprehensions:
l1 = [1,3,5,7,9]
# sequences of logical values:
l1_map = map(criterion, l1)
l1_comp = (criterion(it) for it in l1)
Similarly for l2 & l3. Then, we can apply Python's builtin 'all' and 'any'.
print(all(l1_map))
print(any(l1_map))
Does this help?
Denis
More information about the Tutor
mailing list