Skip to content

Latest commit

 

History

History
181 lines (125 loc) · 6.57 KB

introduction.md

File metadata and controls

181 lines (125 loc) · 6.57 KB

Introduction

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:

  1. Name Assignment (variables and constants),
  2. Functions (the def keyword and the return keyword),
  3. Comments, and
  4. Docstrings.

Name Assignment (Variables & Constants)

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

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.

Functions

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

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.

Docstrings

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