Functions
Defining a function
In Python, functions are defined via the following syntax:
def NAME( PARAMETERS ):
STATEMENTS
where you replace NAME
with (almost) anything but a Python keyword. Ideally, however, the function should be named so it is obvious what the function is supposed to do. Conventionally, it is typical to name functions using snake_case. The parameters are, for the most part, treated as variables and named as such, and STATEMENTS
represents the rest of the function.
Function with no parameters or return value
As a concrete example, consider the following function:
def print_hello_world():
print('Hello, world')
To actually run this function, we call it by adding a line print_hello_world()
. Thus, we might run something like
def print_hello_world():
print('Hello, world')
print_hello_world()
Function with single parameter and no return value
Suppose we want to upgrade our print_hello_world
so that it can print messages other than just a hello world. We might write something like the following:
def print_message(message):
print(message)
print('Python!')
Function with multiple parameters and a return value
Suppose we want to write a function that computes the rectangular form \(a + ib\) of the complex number \(re^{i\theta}\) assuming we know \(r \in \mathbb R\) and \(\theta\in\mathbb R\). By Euler’s formula, we know that \[ re^{i\theta} = r\cos\theta + ir\sin\theta. \] Thus, we might write the following:
import math
def polar_to_rect(r, theta):
return r*math.cos(theta) + 1j*r*math.sin(theta)
print(polar_to_rect(2, math.pi/4))
This prints
(1.4142135623730951+1.414213562373095j)
This is, in fact, expected since \(2e^{i\pi/4} = \sqrt{2} + i\sqrt{2}\).
Scope of variables and parameters
Variables, including parameters, created inside a function only exist and can accessed within that function (without resorting to weird Python tricks, that is). So if we did something like this:
def print_this(a):
print('You passed ' + str(a))
print_this(5)
print(a)
Python will complain about a syntax error:
Traceback (most recent call last):
File "/home/itzsomebody/Desktop/example.py", line 5, in <module>
print(a)
^
NameError: name 'a' is not defined
Exercises
Consider periodic compounding. Let \(P\) be the original principal sum, \(r\) be the nominal annual interest rate, \(n\) be the compounding frequency, and \(t\) be the length of time we consider for interest. Then the total accumlated value \(A\) is given by the formula \[A = P\left(1 + \frac{r}{n}\right)^{nt}.\] Write a function,
total_accumlated_value(p, r, n, t)
that computes the total accumulated value. Test your function by printing the result for \(P = 100\), \(r = 0.05\), \(n = 12\), and \(t = 1\) (you should get105.1161897881733
or similar).Recall that the formulas for converting Fahrenheit to Celsius is \[C = \frac{5}{9}(F - 32).\] Solving this formula for \(F\) gives us the formula for converting Celsius to Fahrenheit: \[F = 32 + \frac{9}{5}C.\] Write Python functions
fahr_to_cels(temp)
andcels_to_fahr(temp)
that perform these conversions. Verify that your functions actually work by comparing to Google’s conversion calculator.