Python is a dynamic and strongly typed programming language. It employs both duck typing and gradual typing, via type hints. Python puts a strong emphasis on code readability and (similar to Haskell) uses significant indentation to denote function, method, and class definitions.
Python was created by Guido van Rossum and first released in 1991.
Imperative, declarative (e.g., functional), and object-oriented programming styles are all supported, but internally everything in Python is an object.
We'll dig more into what all of that means as we continue through the Python track concepts.
This first concept (basics
) introduces 4 major Python language features:
- Name Assignment (variables and constants),
- Functions (the
def
keyword and thereturn
keyword), - Comments, and
- Docstrings.
Programmers can bind names (also called variables) to any type of object using the assignment =
operator: <name> = <value>
.
A name can be reassigned (or re-bound) to different values (different object types) over its lifetime:
>>> my_first_variable = 1 # my_first_variable bound to an integer object of value one.
>>> my_first_variable = 2 # my_first_variable re-assigned to integer value 2.
>>> print(type(my_first_variable))
<class 'int'>
>>> print(my_first_variable)
2
>>> my_first_variable = "Now, I'm a string." # You may re-bind a name to a different object type and value.
>>> print(type(my_first_variable))
<class 'str'>
>>> print(my_first_variable)
"Now, I'm a string." # Strings can be declared using single or double quote marks.
Constants are names meant to be assigned only once in a program — although Python will not prevent re-assignment.
Using SCREAMING_SNAKE_CASE
signals to anyone reading the code that the name should not be re-assigned, or its value mutated.
Constants should be defined at a module (file) level, and are typically visible to all functions and classes in a program.
The def
keyword begins a function definition.
Each function can have zero or more formal parameters in ()
parenthesis, followed by a :
colon.
Statements for the body of the function begin on the line following def
and must be indented in a block.
# The body of this function is indented by 2 spaces,& prints the sum of the numbers.
def add_two_numbers(number_one, number_two):
total = number_one + number_two
print(total)
>>> add_two_numbers(3, 4)
7
# Inconsistent indentation in your code blocks will raise an error.
>>> def add_three_numbers_misformatted(number_one, number_two, number_three):
... result = number_one + number_two + number_three # This was indented by 4 spaces.
... print(result) #this was only indented by 3 spaces
...
...
File "<stdin>", line 3
print(result)
^
IndentationError: unindent does not match any outer indentation level
Functions explicitly return a value or object via the return
keyword:
# Function definition on first line, explicit return used on final line.
def add_two_numbers(number_one, number_two):
return number_one + number_two
# Calling the function in the Python terminal returns the sum of the numbers.
>>> add_two_numbers(3, 4)
7
# Assigning the function call to a variable and printing
# the variable will also return the value.
>>> sum_with_return = add_two_numbers(5, 6)
>>> print(sum_with_return)
11
Functions that do not have an explicit return
expression will implicitly return the None
object.
This means that if you do not use return
in a function, Python will return the None
object for you.
The details of None
will be covered in a later exercise.
For the purposes of this exercise and explanation, None
is a placeholder that represents nothing, or null:
# This function does not have an explicit return.
def add_two_numbers(number_one, number_two):
result = number_one + number_two
# Calling the function in the Python terminal appears
# to not return anything at all.
>>> add_two_numbers(5, 7)
>>>
# Using print() with the function call shows that
# the function is actually returning the **None** object.
>>> print(add_two_numbers(5, 7))
None
# Assigning the function call to a variable and printing
# the variable will also show None.
>>> sum_without_return = add_two_numbers(5, 6)
>>> print(sum_without_return)
None
Comments in Python start with a #
that is not part of a string, and end at line termination.
Unlike many other programming languages, Python does not support multi-line comment marks.
Each line of a comment block must start with the #
character.
The first statement of a function body can optionally be a docstring, which concisely summarizes the function or object's purpose. Docstring conventions are laid out in PEP257. Docstrings are declared using triple double quotes (""") indented at the same level as the code block:
# An example from PEP257 of a multi-line docstring.
def complex(real=0.0, imag=0.0):
"""Form a complex number.
Keyword arguments:
real -- the real part (default 0.0)
imag -- the imaginary part (default 0.0)
"""
if imag == 0.0 and real == 0.0:
return complex_zero