02. Functions

A function is a small chunk of reusable code that performs some task. Utilizing functions helps us easily debug and maintain our code. Functions also avoid code duplication and keeps our code looking clean. As a programmer, you should try to separate each small task within individual functions for better readability and good practice.

We've already looked at method and function calls earlier on. Let's now learn how to define our own functions.

Defining functions

To define a function, use the def keyword (short for definition), followed by your function name. Within the following set of parentheses, specify your formal parameters.

The following function doubles a value and adds one to it.

def doubleAndAdd(n):
  return 2*n+1

Python requires that each line that is part of the function to be indented inward. If we don't indent each line within our function, then we get an error message.

def doubleAndAddOne(n):
  return n+1
File "<stdin>", line 2
    return 2*n+1;
IndentationError: expected an indented block


The return keyword is used to return a value to its caller. If no value is specified after the return keyword, then None is returned.

Doing nothing

While developing programs, you may find yourself defining functions that are yet to be implemented. To avoid Python erroring out a function with no statements, use the keyword pass as a filler until you figure out what to write.

def doubleAndAddOne(n):
  # TODO: implement doubleAndAddOne formula


As programmers, it's good practice to communicate to others about what our functions do. The opening line of the function is known as the docstring. It is a literal string value that describes the function. To declare it, use three double-quotation marks, right after the function definition.

def doubleAndAddOne(n):
  """This function returns an input value plus one."""
  return 2*n+1

Now when the user prompts the help function, he or she can read the brief description.

>>> help(doubleAndAddOne)
Help on function doubleAndAddOne in module __main__:
  This function returns an input value plus one.

Docstring Conventions

  • The first line should be a short, concise summary of object or function's purpose.
  • First line should start with a capital letter and end with a period.
  • We do not need to declare what type it is since the user can obtain that be other means.
  • If there are more than one line, then the second line should be blank.

Symbol table

With every function execution, a new symbol table is created. The symbol table stores all the local variables that are initialized from within our function. Thus, when a variable is called, Python looks within the first symbol table on our stack. If nothing is found there, then it moves up to the next functions, then to the global symbol table and finally the built-in names. If still nothing is found, an error results.

The only way a global variable can be assigned is through the global statement.

Default and optional parameters

Sometimes you want to make a function parameter value optional. In such cases, the parameters will take on a default value if the variable is undefined.

def doubleAndAddOne(n, double=False):
  """This function returns an input value plus one."""
  return 2*n+1 if double else n+1
>>> doubleAndAddOne(2)
# double is automatically set to False

To specify a variable, specify the variable and the value you want to give it.

>>> doubleAndAddOne(2, double=True)

Arbitrary arguments

You may want to specify an arbitrary number of arguments into variadic arguments. These will take in all other parameters and store it into a tuple. Precede this special argument with an asterisk (*).

def arb_arguments(*args, param = 'default'):
  print("arbitrary argument list:")
  for arg in args:
  print("param = " + param)
>>> arb_arguments(1,2,3,4)
arbitrary argument list:
param = default
>>> arb_arguments('hello', 'hi', 'whatsup', param = 'custom')
arbitrary argument list:
param = custom


Assertions can be used to check certain values from within a Python program. For example, we can write the following in our code to ensure we have a positive value.

def doubleAndAddOne(n):
  """ This function returns an input value plus one. """
  assert n > 0
  return 2*n+1

Now when we specify a negative value, we can see that our assertion fails.

>>> doubleAndAddOne(-2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, indoubleAndAddOne 

Custom assertion error messages

To create your own customer assertion error message, input a second parameter. This will be triggered if our assertion fails.

def doubleAndAddOne(n):
  """ This function returns an input value plus one. """
  assert n > 0, "Please enter a positive value."
  return 2*n+1

Now we can see our own custom error message returned if a negative value is put in.

>>> help(doubleAndAddOne)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, indoubleAndAddOne 
AssertionError: Please enter a positive value.

Lambda Expressions

To create an anonymous function, use the lambda keyword. In this function, we'll first assign x, then let any future functions assign the other variables.

>>> def multiply(x):
...    return lambda a, b: x * (a + b)
>>> f = multiple(2)
>>> f(3,4)        # 2 * (3+4)

Aching back from coding all day?

Foam Seat Cushion

Aching back from coding all day? Try Back Problems

This foam seat cushion relieves lowerback pain, numbness and pressure sores by promoting healthy weight distribution, posture and spine alignment. Furthermore, it reduces pressure on the tailbone and hip bones while sitting. Perfect for sitting on the computer desk for long periods of time.

$ Check price
99.9599.95Amazon 4.5 logo(9,445+ reviews)

More Back Problems resources

Learn to be a Pythonista!

Learning Python

Learn to be a Pythonista! Try Python

Get a comprehensive, in-depth introduction to the core Python language with this hands-on book. Based on author Mark Lutz's popular training course, this updated fifth edition will help you quickly write efficient, high-quality code with Python. It's an ideal way to begin, whether you're new to programming or a professional developer versed in other languages.

$ Check price
64.9964.99Amazon 4 logo(279+ reviews)

More Python resources