Now consider writing a function is_odd.
We could do so by basing it on our approach in
is_even,
def is_even(n):
if n%2 == 0:
return True
else:
return False
so is_odd could be written as,
def is_odd(n):
if n%2 != 0:
return True
else:
return False
An alternative would be to base it on is_even itself
(rather than just reusing the same approach). Taking this tack we would write
is_odd as,
def is_odd(n):
return not is_even(n)
which just calls is_even and negates its return value. Most
programmers would prefer the second version even though in it
is_odd is no longer a standalone function, but is instead
dependent on is_even. Why? Well the second version involves
writing less code and the result is shorter. More importantly if someday a
better way of determining if a number is even is found only one function
needs to be rewritten (is_even) and the other
(is_odd) automatically benefits from the improvement. We are
unlikely to find a better way of testing for evenness, but there are many
other computationally intensive processes where better methods are
continually being developed and the fewer places in our code we need to
implement the new methods to take advantage of them the better.