# Built-in Functions and Help

## Overview

Teaching: 15 min
Exercises: 10 min
Questions
• How can I use built-in functions?

• How can I find out what they do?

• What kind of errors can occur in programs?

Objectives
• Explain the purpose of functions.

• Correctly call built-in Python functions.

• Correctly nest calls to built-in functions.

• Use help to display documentation for built-in functions.

• Correctly describe situations in which SyntaxError and NameError occur.

``````# This sentence isn't executed by Python.
adjustment = 0.5   # Neither is this - anything after '#' is ignored.
``````

## A function may take zero or more arguments.

• We have seen some functions already — now let’s take a closer look.
• An argument is a value passed into a function.
• `len` takes exactly one.
• `int`, `str`, and `float` create a new value from an existing one.
• `print` takes zero or more.
• `print` with no arguments prints a blank line.
• Must always use parentheses, even if they’re empty, so that Python knows a function is being called.
``````print('before')
print()
print('after')
``````
``````before

after
``````

## Commonly-used built-in functions include `max`, `min`, and `round`.

• Use `max` to find the largest value of one or more values.
• Use `min` to find the smallest.
• Both work on character strings as well as numbers.
• “Larger” and “smaller” use (0-9, A-Z, a-z) to compare letters.
``````print(max(1, 2, 3))
print(min('a', 'A', '0'))
``````
``````3
0
``````

## Functions may only work for certain (combinations of) arguments.

• `max` and `min` must be given at least one argument.
• “Largest of the empty set” is a meaningless question.
• And they must be given things that can meaningfully be compared.
``````print(max(1, 'a'))
``````
``````TypeError: unorderable types: str() > int()
``````

## Functions may have default values for some arguments.

• `round` will round off a floating-point number.
• By default, rounds to zero decimal places.
``````round(3.712)
``````
``````4
``````
• We can specify the number of decimal places we want.
``````round(3.712, 1)
``````
``````3.7
``````

## Use the built-in function `help` to get help for a function.

• Every built-in function has online documentation.
``````help(round)
``````
``````Help on built-in function round in module builtins:

round(...)
round(number[, ndigits]) -> number

Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
``````

## Python reports a syntax error when it can’t understand the source of a program.

• Won’t even try to run the program if it can’t be parsed.
``````# Forgot to close the quote marks around the string.
name = 'Feng
``````
``````SyntaxError: EOL while scanning string literal
``````
``````# An extra '=' in the assignment.
age = = 52
``````
``````SyntaxError: invalid syntax
``````
• Look more closely at the error message:
``````print("hello world"
``````
``````  File "<ipython-input-6-d1cc229bf815>", line 1
print ("hello world"
^
SyntaxError: unexpected EOF while parsing
``````
• The message indicates a problem on first line of the input (“line 1”).
• In this case the “ipython-input” section of the file name tells us that we are working with input into IPython, the Python interpreter used by the Jupyter Notebook.
• The `-6-` part of the filename indicates that the error occurred in cell 6 of our Notebook.
• Next is the problematic line of code, indicating the problem with a `^` pointer.

## Python reports a runtime error when something goes wrong while a program is executing.

``````age = 53
remaining = 100 - aege # mis-spelled 'age'
``````
``````NameError: name 'aege' is not defined
``````
• Fix syntax errors by reading the source and runtime errors by tracing execution.

## The Jupyter Notebook has two ways to get help.

• Place the cursor inside the parenthesis of the function, hold down `shift`, and press `tab`.
• Or type a function name with a question mark after it.

## Every function returns something.

• Every function call produces some result.
• If the function doesn’t have a useful result to return, it usually returns the special value `None`.
``````result = print('example')
print('result of print is', result)
``````
``````example
result of print is None
``````

## What Happens When

1. Explain in simple terms the order of operations in the following program: when does the addition happen, when does the subtraction happen, when is each function called, etc.
2. What is the final value of `radiance`?
``````radiance = 1.0
``````

## Solution

1.

1. `1.1 * radiance = 1.1`
2. `1.1 - 0.5 = 0.6`
3. `min(randiance, 0.6) = 0.6`
4. `2.0 + 0.6 = 2.6`
5. `max(2.1, 2.6) = 2.6`
6. At the end, `radiance = 2.6`

## Spot the Difference

1. Predict what each of the `print` statements in the program below will print.
2. Does `max(len(rich), poor)` run or produce an error message? If it runs, does its result make any sense?
``````easy_string = "abc"
print(max(easy_string))
rich = "gold"
poor = "tin"
print(max(rich, poor))
print(max(len(rich), len(poor)))
``````

## Solution

1. ``````print(max(easy_string))
``````
``````c
``````
``````print(max(rich, poor))
``````
``````tin
``````
``````print(max(len(rich), len(poor)))
``````
``````4
``````
1. It throws a TypeError. The command is trying to run `max(4, 'tin')` and you can’t compare a string and an integer

## Why Not?

Why don’t `max` and `min` return `None` when they are given no arguments?

## Solution

`max` and `min` return TypeErrors in this case because the correct number of parameters was not supplied. If it just returned `None`, the error would be much harder to trace as it would likely be stored into a variable and used later in the program, only to likely throw a runtime error.

## Last Character of a String

If Python starts counting from zero, and `len` returns the number of characters in a string, what index expression will get the last character in the string `name`? (Note: we will see a simpler way to do this in a later episode.)

## Solution

`name[len(name) - 1]`

## Key Points

• A function may take zero or more arguments.

• Commonly-used built-in functions include `max`, `min`, and `round`.

• Functions may only work for certain (combinations of) arguments.

• Functions may have default values for some arguments.

• Use the built-in function `help` to get help for a function.

• The Jupyter Notebook has two ways to get help.

• Every function returns something.

• Python reports a syntax error when it can’t understand the source of a program.

• Python reports a runtime error when something goes wrong while a program is executing.

• Fix syntax errors by reading the source code, and runtime errors by tracing the program’s execution.