12.6. 👩💻 Decoding a Function¶
In general, when you see a function definition you will try figure out what the function does, but, unless you are writing the function, you won’t care how it does it.
For example, here is a summary of some functions we have seen already.
inputtakes one parameter, a string. It is displayed to the user. Whatever the user types is returned, as a string.
inttakes one parameter. It can be of any type that can be converted into an integer, such as a floating point number or a string whose characters are all digits.
Sometimes, you will be presented with a function definition whose operation is not so neatly summarized as above. Sometimes you will need to look at the code, either the function definition or code that invokes the function, in order to figure out what it does.
To build your understanding of any function, you should aim to answer the following questions:
How many parameters does it have?
What is the type of values that will be passed when the function is invoked?
What is the type of the return value that the function produces when it executes?
If you try to make use of functions, ones you write or that others write, without being able to answer these questions, you will find that your debugging sessions are long and painful.
The first question is always easy to answer. Look at the line with the function definition, look inside the parentheses, and count how many variable names there are.
The second and third questions are not always so easy to answer. In Python, unlike some other programming languages, variables are not declared to have fixed types, and the same holds true for the variable names that appear as formal parameters of functions. You have to figure it out from context.
To figure out the types of values that a function expects to receive as parameters, you can look at the function invocations or you can look at the operations that are performed on the parameters inside the function.
Here are some clues that can help you determine the type of object associated with any variable, including a function parameter. If you see…
len(x), then x must be a string or a list. (Actually, it can also be a dictionary, in which case it is equivalent to the expression
len(x.keys()). Later in the course, we will also see some other sequence types that it could be). x can’t be a number or a Boolean.
x - y, x and y must be numbers (integer or float)
x + y, x and y must both be numbers, both be strings, or both be lists
x, x must be a string or a list containing at least four items, or x must be a dictionary that includes 3 as a key.
x['3'], x must be a dictionary, with ‘3’ as a key.
x[y:z], x must be a sequence (string or list), and y and z must be integers
x and y, x and y must be Boolean
for x in y, y must be a sequence (string or list) or a dictionary (in which case it’s really the dictionary’s keys); x must be a character if y is a string; if y is a list, x could be of any type.
Check your understanding: decode this function definition