try:
# Use "raise" to raise an error
raise IndexError("This is an index error")
except IndexError as e:
pass # Pass is just a no-op. Usually you would do recovery here.
except (TypeError, NameError):
pass # Multiple exceptions can be handled together, if required.
else: # Optional clause to the try/except block. Must follow all except blocks
print("All good!") # Runs only if the code in try raises no exceptions
finally: # Execute under all circumstances
print("We can clean up resources here")
Python Cheat Sheet
The Python cheat sheet is a one-page reference sheet for the Python 3 programming language.
Miscellaneous
Handle exceptions
Generator to list
values = (-x for x in [1,2,3,4,5])
gen_to_list = list(values)
# => [-1, -2, -3, -4, -5]
print(gen_to_list)
Generators
def double\_numbers(iterable):
for i in iterable:
yield i + i
Generators help you make lazy code.
Comments
# This is a single line comments.
""" Multiline strings can be written
using three "s, and are often used
as documentation.
"""
''' Multiline strings can be written
using three 's, and are often used
as documentation.
'''
Python Classes & Inheritance
Inheritance
class Animal:
def \_\_init\_\_(self, name, legs):
self.name = name
self.legs = legs
class Dog(Animal):
def sound(self):
print("Woof!")
Yoki = Dog("Yoki", 4)
print(Yoki.name) # => YOKI
print(Yoki.legs) # => 4
Yoki.sound() # => Woof!
Overriding
class ParentClass:
def print\_self(self):
print("Parent")
class ChildClass(ParentClass):
def print\_self(self):
print("Child")
child_instance = ChildClass()
child_instance.print_self() # => Child
Polymorphism
class ParentClass:
def print\_self(self):
print('A')
class ChildClass(ParentClass):
def print\_self(self):
print('B')
obj_A = ParentClass()
obj_B = ChildClass()
obj_A.print_self() # => A
obj_B.print_self() # => B
User-defined exceptions
class CustomError(Exception):
pass
repr() method
class Employee:
def \_\_init\_\_(self, name):
self.name = name
def \_\_repr\_\_(self):
return self.name
john = Employee('John')
print(john) # => John
Super() Function
class ParentClass:
def print\_test(self):
print("Parent Method")
class ChildClass(ParentClass):
def print\_test(self):
print("Child Method")
# Calls the parent's print\_test()
super().print_test()
>>> child_instance = ChildClass()
>>> child_instance.print_test()
Child Method
Parent Method
Class Variables
class MyClass:
class_variable = "A class variable!"
# => A class variable!
print(MyClass.class_variable)
x = MyClass()
# => A class variable!
print(x.class_variable)
Method
class Dog:
# Method of the class
def bark(self):
print("Ham-Ham")
charlie = Dog()
charlie.bark() # => "Ham-Ham"
Constructors
class Animal:
def \_\_init\_\_(self, voice):
self.voice = voice
cat = Animal('Meow')
print(cat.voice) # => Meow
dog = Animal('Woof')
print(dog.voice) # => Woof
Python File Handling
Delete Folder
import os
os.rmdir("myfolder")
Check and Delete
import os
if os.path.exists("myfile.txt"):
os.remove("myfile.txt")
else:
print("The file does not exist")
Delete a File
import os
os.remove("myfile.txt")
Python Modules
Functions and attributes
import math
dir(math)
Shorten module
import math as m
# => True
math.sqrt(16) == m.sqrt(16)
Import all
from math import *
From a module
from math import ceil, floor
print(ceil(3.7)) # => 4.0
print(floor(3.7)) # => 3.0
Import modules
import math
print(math.sqrt(16)) # => 4.0
Python Functions
Anonymous functions
# => True
(lambda x: x > 2)(3)
# => 5
(lambda x, y: x ** 2 + y ** 2)(2, 1)
Default Value
def add(x, y=10):
return x + y
add(5) # => 15
add(5, 20) # => 25
Returning multiple
def swap(x, y):
return y, x
x = 1
y = 2
x, y = swap(x, y) # => x = 2, y = 1
Keyword arguments
def keyword\_args(\*\*kwargs):
return kwargs
# => {"big": "foot", "loch": "ness"}
keyword_args(big="foot", loch="ness")
Positional arguments
def varargs(\*args):
return args
varargs(1, 2, 3) # => (1, 2, 3)
Return
def add(x, y):
print("x is %s, y is %s" %(x, y))
return x + y
add(5, 6) # => 11
Python Loops
for/else
nums = [60, 70, 30, 110, 90]
for n in nums:
if n > 100:
print("%d is bigger than 100" %n)
break
else:
print("Not found!")
Also see: Python Tips
With zip()
words = ['Mon', 'Tue', 'Wed']
nums = [1, 2, 3]
# Use zip to pack into a tuple list
for w, n in zip(words, nums):
print('%d:%s, ' %(n, w))
Prints: 1:Mon, 2:Tue, 3:Wed,
Range
for i in range(4):
print(i) # Prints: 0 1 2 3
for i in range(4, 8):
print(i) # Prints: 4 5 6 7
for i in range(4, 10, 2):
print(i) # Prints: 4 6 8
Continue
for index in range(3, 8):
x = index * 10
if index == 5:
continue
print(x)
Prints: 30 40 60 70
Break
x = 0
for index in range(10):
x = index * 10
if index == 5:
break
print(x)
Prints: 0 10 20 30 40
While
x = 0
while x < 4:
print(x)
x += 1 # Shorthand for x = x + 1
Prints: 0 1 2 3
With index
animals = ["dog", "cat", "mouse"]
# enumerate() adds counter to an iterable
for i, value in enumerate(animals):
print(i, value)
Prints: 0 dog 1 cat 2 mouse
Python Flow control
else if
value = True
if not value:
print("Value is False")
elif value is None:
print("Value is None")
else:
print("Value is True")
One line
>>> a = 330
>>> b = 200
>>> r = "a" if a > b else "b"
>>> print(r)
a
Basic
num = 5
if num > 10:
print("num is totally bigger than 10.")
elif num < 10:
print("num is smaller than 10.")
else:
print("num is indeed 10.")
Python Lists
Repeating
>>> li = ["re"] * 3
>>> li
['re', 're', 're']
Count
>>> li = [3, 1, 3, 2, 5]
>>> li.count(3)
2
Sort & Reverse
>>> li = [3, 1, 3, 2, 5]
>>> li.sort()
>>> li
[1, 2, 3, 3, 5]
>>> li.reverse()
>>> li
[5, 3, 3, 2, 1]
Concatenating
>>> odd = [1, 3, 5]
>>> odd.extend([9, 11, 13])
>>> odd
[1, 3, 5, 9, 11, 13]
>>> odd = [1, 3, 5]
>>> odd + [9, 11, 13]
[1, 3, 5, 9, 11, 13]
Access
>>> li = ['a', 'b', 'c', 'd']
>>> li[0]
'a'
>>> li[-1]
'd'
>>> li[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Remove
>>> li = ['bread', 'butter', 'milk']
>>> li.pop()
'milk'
>>> li
['bread', 'butter']
>>> del li[0]
>>> li
['butter']
List Slicing
Syntax of list slicing:
a_list[start:end]
a_list[start:end:step]
#Slicing
>>> a = ['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
>>> a[2:5]
['bacon', 'tomato', 'ham']
>>> a[-5:-2]
['egg', 'bacon', 'tomato']
>>> a[1:4]
['egg', 'bacon', 'tomato']
#Omitting index
>>> a[:4]
['spam', 'egg', 'bacon', 'tomato']
>>> a[0:4]
['spam', 'egg', 'bacon', 'tomato']
>>> a[2:]
['bacon', 'tomato', 'ham', 'lobster']
>>> a[2:len(a)]
['bacon', 'tomato', 'ham', 'lobster']
>>> a
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
>>> a[:]
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
#With a stride
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
>>> a[0:6:2]
['spam', 'bacon', 'ham']
>>> a[1:6:2]
['egg', 'tomato', 'lobster']
>>> a[6:0:-2]
['lobster', 'tomato', 'egg']
>>> a
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
>>> a[::-1]
['lobster', 'ham', 'tomato', 'bacon', 'egg', 'spam']
Append
>>> li = []
>>> li.append(1)
>>> li
[1]
>>> li.append(2)
>>> li
[1, 2]
>>> li.append(4)
>>> li
[1, 2, 4]
>>> li.append(3)
>>> li
[1, 2, 4, 3]
Generate
>>> list(filter(lambda x : x % 2 == 1, range(1, 20)))
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> [x ** 2 for x in range (1, 11) if x % 2 == 1]
[1, 9, 25, 49, 81]
>>> [x for x in [3, 4, 5, 6, 7] if x > 5]
[6, 7]
>>> list(filter(lambda x: x > 5, [3, 4, 5, 6, 7]))
[6, 7]
Defining
>>> li1 = []
>>> li1
[]
>>> li2 = [4, 5, 6]
>>> li2
[4, 5, 6]
>>> li3 = list((1, 2, 3))
>>> li3
[1, 2, 3]
>>> li4 = list(range(1, 11))
>>> li4
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Python F-Strings (Since Python 3.6+)
F-Strings Sign
>>> f'{12345:+}' # [sign] (+/-)
'+12345'
>>> f'{-12345:+}'
'-12345'
>>> f'{-12345:+10}'
' -12345'
>>> f'{-12345:+010}'
'-000012345'
F-Strings Others
>>> f'{-12345:0=10}' # negative numbers
'-000012345'
>>> f'{12345:010}' # [0] shortcut (no align)
'0000012345'
>>> f'{-12345:010}'
'-000012345'
>>> import math # [.precision]
>>> math.pi
3.141592653589793
>>> f'{math.pi:.2f}'
'3.14'
>>> f'{1000000:,.2f}' # [grouping\_option]
'1,000,000.00'
>>> f'{1000000:\_.2f}'
'1\_000\_000.00'
>>> f'{0.25:0%}' # percentage
'25.000000%'
>>> f'{0.25:.0%}'
'25%'
f-Strings Type
>>> f'{10:b}' # binary type
'1010'
>>> f'{10:o}' # octal type
'12'
>>> f'{200:x}' # hexadecimal type
'c8'
>>> f'{200:X}'
'C8'
>>> f'{345600000000:e}' # scientific notation
'3.456000e+11'
>>> f'{65:c}' # character type
'A'
>>> f'{10:#b}' # [type] with notation (base)
'0b1010'
>>> f'{10:#o}'
'0o12'
>>> f'{10:#x}'
'0xa'
f-Strings Fill Align
>>> f'{"text":10}' # [width]
'text '
>>> f'{"test":\*>10}' # fill left
'\*\*\*\*\*\*test'
>>> f'{"test":\*<10}' # fill right
'test\*\*\*\*\*\*'
>>> f'{"test":\*^10}' # fill center
'\*\*\*test\*\*\*'
>>> f'{12345:0>10}' # fill with numbers
'0000012345'
f-Strings usage
>>> website = 'Quickref.ME'
>>> f"Hello, {website}"
"Hello, Quickref.ME"
>>> num = 10
>>> f'{num} + 10 = {num + 10}'
'10 + 10 = 20'
>>> f"""He said {"I'm John"}"""
"He said I'm John"
>>> f'5 {"{stars}"}'
'5 {stars}'
>>> f'{{5}} {"stars"}'
'{5} stars'
>>> name = 'Eric'
>>> age = 27
>>> f"""Hello!
... I'm {name}.
... I'm {age}."""
"Hello!\n I'm Eric.\n I'm 27."
it is available since Python 3.6, also see: Formatted string literals
Python Strings
Endswith
>>> "Hello, world!".endswith("!")
True
Join
>>> "#".join(["John", "Peter", "Vicky"])
'John#Peter#Vicky'
Input
>>> name = input("Enter your name: ")
Enter your name: Tom
>>> name
'Tom'
Get input data from console
Formatting
name = "John"
print("Hello, %s!" % name)
name = "John"
age = 23
print("%s is %d years old." % (name, age))
#format() Method
txt1 = "My name is {fname}, I'm {age}".format(fname="John", age=36)
txt2 = "My name is {0}, I'm {1}".format("John", 36)
txt3 = "My name is {}, I'm {}".format("John", 36)
Concatenates
>>> s = 'spam'
>>> t = 'egg'
>>> s + t
'spamegg'
>>> 'spam' 'egg'
'spamegg'
Check String
>>> s = 'spam'
>>> s in 'I saw spamalot!'
True
>>> s not in 'I saw The Holy Grail!'
True
Multiple copies
>>> s = '===+'
>>> n = 8
>>> s * n
'===+===+===+===+===+===+===+===+'
String Length
>>> hello = "Hello, World!"
>>> print(len(hello))
13
The len() function returns the length of a string
Looping
>>> for char in "foo":
... print(char)
f
o
o
Loop through the letters in the word "foo"
Array-like
>>> hello = "Hello, World"
>>> print(hello[1])
e
>>> print(hello[-1])
d
Get the character at position 1 or last
Python Advanced Data Types
Stacks and Queues
from collections import deque
q = deque() # empty
q = deque([1, 2, 3]) # with values
q.append(4) # append to right side
q.appendleft(0) # append to left side
print(q) # => deque([0, 1, 2, 3, 4])
x = q.pop() # remove & return from right
y = q.popleft() # remove & return from left
print(x) # => 4
print(y) # => 0
print(q) # => deque([1, 2, 3])
q.rotate(1) # rotate 1 step to the right
print(q) # => deque([3, 1, 2])
Deque is a double-ended queue with O(1) time for append/pop operations from both sides. Used as stacks and queues. See: Deque
Heaps
import heapq
myList = [9, 5, 4, 1, 3, 2]
heapq.heapify(myList) # turn myList into a Min Heap
print(myList) # => [1, 3, 2, 5, 9, 4]
print(myList[0]) # first value is always the smallest in the heap
heapq.heappush(myList, 10) # insert 10
x = heapq.heappop(myList) # pop and return smallest item
print(x) # => 1
#Negate all values to use Min Heap as Max Heap
myList = [9, 5, 4, 1, 3, 2]
myList = [-val for val in myList] # multiply by -1 to negate
heapq.heapify(myList)
x = heapq.heappop(myList)
print(-x) # => 9 (making sure to multiply by -1 again)
Heaps are binary trees for which every parent node has a value less than or equal to any of its children. Useful for accessing min/max value quickly. Time complexity: O(n) for heapify, O(log n) push and pop. See: Heapq
Python Built-in Data Types
Casting
#Integers
x = int(1) # x will be 1
y = int(2.8) # y will be 2
z = int("3") # z will be 3
#Floats
x = float(1) # x will be 1.0
y = float(2.8) # y will be 2.8
z = float("3") # z will be 3.0
w = float("4.2") # w will be 4.2
#Strings
x = str("s1") # x will be 's1'
y = str(2) # y will be '2'
z = str(3.0) # z will be '3.0'
Dictionary
>>> empty_dict = {}
>>> a = {"one": 1, "two": 2, "three": 3}
>>> a["one"]
1
>>> a.keys()
dict_keys(['one', 'two', 'three'])
>>> a.values()
dict_values([1, 2, 3])
>>> a.update({"four": 4})
>>> a.keys()
dict_keys(['one', 'two', 'three', 'four'])
>>> a['four']
4
Key: Value pair, JSON like object
Set
set1 = {"a", "b", "c"}
set2 = set(("a", "b", "c"))
Set of unique items/objects
Tuple
my_tuple = (1, 2, 3)
my_tuple = tuple((1, 2, 3))
Similar to List but immutable
Booleans
my_bool = True
my_bool = False
bool(0) # => False
bool(1) # => True
Numbers
x = 1 # int
y = 2.8 # float
z = 1j # complex
>>> print(type(x))
<class 'int'>
Getting Started
f-Strings (Python 3.6+)
>>> website = 'Quickref.ME'
>>> f"Hello, {website}"
"Hello, Quickref.ME"
>>> num = 10
>>> f'{num} + 10 = {num + 10}'
'10 + 10 = 20'
See: Python F-Strings
Plus-Equals
counter = 0
counter += 10 # => 10
counter = 0
counter = counter + 10 # => 10
message = "Part 1."
# => Part 1.Part 2.
message += "Part 2."
Arithmetic
result = 10 + 30 # => 40
result = 40 - 10 # => 30
result = 50 * 5 # => 250
result = 16 / 4 # => 4.0 (Float Division)
result = 16 // 4 # => 4 (Integer Division)
result = 25 % 2 # => 1
result = 5 ** 3 # => 125
The /
means quotient of x and y, and the //
means floored quotient of x and y, also see StackOverflow
File Handling
with open("myfile.txt", "r", encoding='utf8') as file:
for line in file:
print(line)
See: File Handling
If Else
num = 200
if num > 0:
print("num is greater than 0")
else:
print("num is not greater than 0")
See: Flow control
Slicing String
>>> msg = "Hello, World!"
>>> print(msg[2:5])
llo
See: Strings
Data Types
str |
Text |
int , float , complex |
Numeric |
list , tuple , range |
Sequence |
dict |
Mapping |
set , frozenset |
Set |
bool |
Boolean |
bytes , bytearray , memoryview |
Binary |
See: Data Types |
Variables
age = 18 # age is of type int
name = "John" # name is now of type str
print(name)
Python can't declare a variable without assignment.
Hello World
>>> print("Hello, World!")
Hello, World!
The famous "Hello World" program in Python
Introduction
- Python (python.org)
- Learn X in Y minutes (learnxinyminutes.com)
- Regex in python (quickref.me)