### Control flow using return statements¶

Return statements (stuff like return True) always terminate the execution of the function once they are reached. After the return statement, we return to the place in the program where the function was called, so that the part of the function that comes after a return statement that gets executed is not executed.

(Note: not every return statement is executed. For example, return statments might occur inside if statements, and are only executed conditionally. For example, if False: return 0 would never be executed)

In [1]:
def artsie_math(arg1, arg2, op):
'''Return arg1+arg2 depending on if command is "add" or "subtract". If
command is neither, print an error message.

Arguments:
arg1 -- a number
arg2 -- a number
command -- an operation (a str)
'''

return arg1 + arg2

if op == "subtract":
return arg1 - arg2

#Will only be executed if command is neither "add" nor "subtract"
#because otherwise the function would have returned by this point.
print("I don't recognize this complicated mathematical operation")

if __name__ == '__main__':

5


Everything makes sense. We didn't print "I don't recognize this complicated mathematical operation" becase the function returned arg1 + arg2, which prevented later lines from being executed.

Now, let's try an uncrecognized operation

In [2]:
if __name__ == '__main__':
print(artsie_math(2, 3, "exponent"))

I don't recognize this complicated mathematical operation
None


Now, the message did get printed, but an additional thing happenned: None got printed. If a function doesn't return a value explicitly, the default return value will be None. We actuall already so a function that doesn't return a value -- print also returns None

In [3]:
a = artsie_math(2, 3, "exponent")
b = print("hi")
print(a, b)

I don't recognize this complicated mathematical operation
hi
None None


#### Rewriting artsie_math¶

It's nicer to first check the whether we need to do any computation, and then to do the computation if necessary. The following is equivalent to artsie_math:

In [4]:
def artsie_math2(arg1, arg2, op):
'''Return arg1+arg2 depending on if command is "add" or "subtract". If
command is neither, print an error message.

Arguments:
arg1 -- a number
arg2 -- a number
op -- an operation (a str)
'''

if (op != "add") and (op != "subtract"):
print("I don't recognize this complicated mathematical operation")
return #We can do this. A return without a value means that we
#stop the execution of the function. (Note: in fact, we are
#returning a special object called None). So this is
#equivalent to
#return None