Introduction to Python
This tutorial will walk through a short introduction to Python with emphasis on the neccessary basics for using dmtools and working with images. To get the most out of this tutorial, it is recommeneded to follow along by running all the code snippets yourself.
Python Scripts
In the Installation section, you saw how you can open up a Python prompt
in a terminal where you can enter Python commands and run them. Anything more
than a one line command is going to be bothersome to write in a prompt.
Furthermore, it will not be repeatable. The python script addresses these
issues. A Python script is a text file with the .py
extension. We can write
these files in any text editor. This tutorial assumes you are using VS Code
(see Installing VS Code). After creating a Python script, you can run the
script from a terminal with python hello_world.py
. However, there is one
catch: you must be in the directory where the hello_world.py
script is
located. Hence, we need to be able to navigate directories while in a terminal.
Hello World!
In this section, we will create a directory where we will put our Python scripts and create our first script.
First, open up a terminal. Run the command mkdir scripts
to create a
directory called scripts. You can then cd
into it a run ls
to see that
there is nothing in it yet.
(base) Name-Of-Machine:~ Name-Of-User$ ls
Applications Library
Desktop Movies
Documents Music
Downloads Public
(base) Name-Of-Machine:~ Name-Of-User$ mkdir scripts
(base) Name-Of-Machine:~ Name-Of-User$ ls
Applications Movies
Desktop Music
Documents Public
Downloads scripts
Library
(base) Name-Of-Machine:~ Name-Of-User$ cd scripts
(base) Name-Of-Machine:scripts Name-Of-User$ ls
(base) Name-Of-Machine:scripts Name-Of-User$
Now, let’s create our first Python script! Rather than opening VS Code
in the traditional way you open applications, we will open it from the
terminal. This is because it will automatically put the files we create in the
working directory which will prevent us from running into issues when trying to
run our Python scripts. Make sure you are still in the scripts
directory
and run code .
to open VS Code (don’t close your terminal because you will
need it to run the Python scripts). You will see a file navigation window on
the left. Create a new file called hello_world.py
.
# hello_world.py
print("Hello World!")
# Expected Output:
# Hello World!
The lines with #
at the beginning are just comments in the Python code. You
do not need to include them but they can give helpful information! Save the
file and try running python hello_world.py
in the terminal.
(base) Name-Of-Machine:scripts Name-Of-User$ python hello_world.py
Hello World!
You just created your first Python script! The remainder of this tutorial will walk you through the basics of Python through multiple example Python scripts . Again, it is recommended you follow along by creating and running these scripts. Even better, try modifying them to see if the output changes as you would expect!
Math
We can add, multipy, subtract, and divide numbers quite easily. What if we
want to use some more complex math functions like the sine function? A lot of
these are provided by a package called NumPy (which we will look at much
closer in Working with Images in NumPy). To access these functins, we first need to
import the package with import numpy as np
. We can then use np.sin()
to apply the sine function to some value. The math package also
provides some useful functions you may want to use like the floor and ceiling
function.
# simple_math.py
# addition, subtraction, multiplication, and division
print(1 + 1) # 2
print(3 - 1) # 2
print(1 * 2) # 2
print(4 / 2) # 2.0
# exponents
print(3**2) # 9
print(9**(1 / 2)) # 3
# math functions from numpy
import numpy as np
print(np.sin(1)) # 0.8414709848078965
print(np.sin(np.pi / 2)) # 1.0
# math functions from math
import math
print(math.floor(0.5)) # 0
print(math.ceil(0.5)) # 1
Variables
It is often helpful to assign a name to a value. This is called a variable.
In the script below, we set the variable x
to be 1
and y
to be
2
. We can then use these variables just like they were the values we
assigned them to.
# variables.py
x = 1
y = 2
z = x + y
print(x + y) # 3
print(y * 2) # 4
print(z) # 3
Loops
If we want to do the same command multiple times, we can use a loop. A loop has
the syntax for i in range(n)
where n
is the number of times we will run
through this loop. The variable i
starts at zero and is incremented by one
every time we run through the loop. The lines of code that are run in every
iteration of the loop make up the loop body. We indent the lines that are in
the loop body.
# loops.py
for i in range(5):
print(i)
x = 0
for i in range(5):
x = x + i
print(x)
# Expected Output:
# 0
# 1
# 2
# 3
# 4
# 10
Conditional Statements
What if we want to run a line of code only if a certain condition holds?
These are called conditional statements. To compare values, we can use ==
for equals and !=
for not equals. Note that x = 2
assigns variable x
the value 2
while x == 2
returns if x
has value 2
or not. Next,
we need the syntax for boolean operators like and, or, and not. The operator
x & y
returns True
if both x
and y
are True
. The operator
x | y
returns True
if at least one of x
or y
are True
.
Lastly, we have the syntax for the conditional statement which is if x:
where the body of the conditional statement runs if x
is True
. The
body of the conditional statement is denoted with indentation like the
loop body.
# condition.py
x = True
y = False
print(x == True) # True
print(x == False) # False
print(x != False) # True
print(not x) # False
print(x & y) # False
print(x & (not y)) # True
print(x | y) # True
print((not x) | y) # False
if True:
print('True!')
if False:
print('This will not print.')
if x | y:
print('True!')
Lists
Sometimes we have a list of values we care about and not just a single value.
We can represent these as a list. For example, x = [1,2,3]
is a list of
three integers. We can then access the value at a certain index with the
notation x[i]
where i
is the index of the value we want. Python is
zero-indexed which means that the first value in a list has index zero. We can
add values to lists with .append()
. We can also add lists together.
# lists.py
x = [1, 2, 3]
y = [4, 5]
print(x) # [1, 2, 3]
print(x[0]) # 1
print(x[2]) # 3
x.append(4)
print(x) # [1, 2, 3, 4]
print(x + y) # [1, 2, 3, 4, 5]
List Comprehension
One of the many nice features in Python is called list comprehension. It allows us to initialize a list. It essentially combines the syntax for a list with the syntax for a loop allowing us to define a list with less code.
# list_comprehension.py
# without list comprehension
x = [] # this list is empty
for i in range(4):
x.append(i)
print(x) # [0, 1, 2, 3]
# with list comprehension
x = [i for i in range(4)]
print(x) # [0, 1, 2, 3]
y = [i**2 for i in range(4) if i**2 != 4]
print(y) # [0, 1, 9]
Functions
One of the most important concepts in programming is the function. Functions
allow us to avoid writing the same code multiple times. A function has
parameters or inputs. Sometimes it has an output and other times, it does not.
The notation for a function declaration in Python is def f(x, y, ...):
where
f
is the name of the function and x, y, ...
are the function parameters.
Like we have seen before, we use indentation in Python to denote the function
body. This is the code that will be run every time the function is called.
If the function will return a value, we use the keyword return
. Lastly,
when we want to call the function, we use the notation f(x, y, ...)
where
f
is the name of the function and x, y, ...
are the arguments or actual
values we are assigning the parameters of that function.
# functions.py
# this function returns something
def add(x, y):
return x + y
x = add(2,3)
y = add(7,8)
print(x) # 5
print(y) # 15
# this function does not return anything
def append_one(x):
x.append(1)
x = [4, 3, 2]
y = append_one(x)
print(x) # [4, 3, 2, 1]
print(y) # None
That concludes the tutorial! If you want to do something in Python but don’t know the syntax, Stack Overflow is a great resource. It is also a great resource if you get an error message when trying to run your Python script.