[Tutor] Built In Functions
Rafael Knuth
rafael.knuth at gmail.com
Tue Dec 17 16:37:54 CET 2013
got it!
Thanks, Peter
On Tue, Dec 17, 2013 at 4:27 PM, Peter Otten <__peter__ at web.de> wrote:
> Rafael Knuth wrote:
>
>> Hej there,
>>
>>> I use any() and all() frequently. For example, suppose you have a
>>> function that takes a list of numbers, and they are all supposed to be
>>> positive.
>>>
>>> def calculate_values(numbers):
>>> if all(number > 0 for number in numbers):
>>> # do the calculation
>>> else:
>>> raise ValueError("negative or zero number found")
>>>
>>> That could be re-written as:
>>>
>>> def calculate_values(numbers):
>>> if any(number <= 0 for number in numbers):
>>> raise ValueError("negative or zero number found")
>>> else:
>>> # do the calculation
>>
>> Got it. I played with the examples above, I wrote wrote two functions
>> and they work nicely.
>> I understand now why it makes sense to use all() and any():
>>
>> def check_values(a, b):
>> if all(number >= 0 for number in range(a, b)):
>> return True
>> else:
>> raise ValueError("negative number")
>>
>> And:
>>
>> def check_values(a, b):
>> if any(number >= 0 for number in range(a, b)):
>> return True
>> else:
>> raise ValueError("negative number")
>>
>> But what if I have to check multiple values within one function? I am
>> able to get the task done with a plain vanilla if statement. In the
>> exemplary function below the user is expected to enter only positive
>> numbers and in case he provides a negative number, a ValueError is
>> raised:
>>
>> def PositiveCalculator(a, b):
>> if a > 0 and b > 0:
>> return a + b
>> else:
>> raise ValueError("negative number")
>>
>> In this function one negative number is tolerated:
>>
>> def PositiveCalculator(a, b):
>> if a > 0 or b > 0:
>> return a + b
>> else:
>> raise ValueError("negative number")
>>
>> How would I have to modify these two functions if I wanted to use the
>> all( ) or any() function respectively?
>
> The first one could become
>
> def positive_calulator(a, b):
> summands = a, b
> if all(x > 0 for x in summands):
> return sum(summands)
> raise ValueError("negative argument encountered")
>
> You can make that work with and arbitrary number of arguments (and save a
> line of code):
>
> def positive_calculator(*summands):
> if all(x > 0 for x in summands):
> return sum(summands)
> raise ValueError("negative argument encountered")
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
More information about the Tutor
mailing list