Basic
Data Type
int
- Decimal: 0, 100, -8080, ...
- Hexadecimal, start with
0x, range0-9,a-f: 0xff00
Python allows use _ to separate numbers, 100_00 == 10000
Some notes:
-
/can transforminttofloat. For example: 3 / 2 = 1.5 -
//is equal tofloor(). The result isint. -
int()andfloor()are different.int(3 // 2) # 1 3 // 2 # 1 int(-3 // 2) # -1 -3 // 2 # -2
float
1.23, 1.23e5 (1.23 * 10 ^ 5)
int is percise and float is not. It depends on how they are stored on the computer.
boolean
True or False
we can use and, or, not to do boolean calcul.
None
None is special value in Python, means none.
string
'' and "" are the same.
\ can translate the meaning.
""" """ is for multi lines.
To format the string, there are 3 ways:
-
"My name is %s. I'am %d years old" % ("Jack", 10)%s: string,%d: int,%f: float,%x: hex%%inputs "%" -
f-string:
name = "Jack" age = 10 print(f"My name is {name}. I'am {age} years old"); -
"My name is {0}. I'am %d years {1}".format("Jack", 10)
JSON and string:
-
json.dump(): basic types => string -
json.loads(): string => basic types
list vs tuple
- list: a mutable ordered set contains any type of data.
- tuple: a immutable ordered set contains any type of data.
Some operation:
l = [1, 2, 3, 4]
-
get last element:
list[-1] # 4 -
slice:
list[1:3] # 2, 3list = [1, 2, 3] tuple = (4, 5, 6) print(list[1:2]) # 2 3 print(list[::2]) # step = 2, output: 1 3 print(tuple[-1]) # 6 -
embed:
t = ('a', 'b', l) t[2][0] = 0 print(t) # ('a', 'b', [0, 2, 3, 4])list in the tuple is still mutable
-
list(t)ortuple(l) -
some function:
count(item) index(item) l.reverse() / l.sort() # apply on variable l directly, so that it's ONLY FOR the list
usage
Tuple is immutable. It hasn't pointers. So that, it's lighter than list.
Tuple is perfect for static data, such as cache, const data, etc.
dict and set
-
dict: A hash map used to stock
key - valuepaires. -
set: A hash map store ONLY the
key
Both of them are based on hash map. Hash value is generated by key.
Note: key must be immutable, such as string
So that dict and set is built for search.
-
dict:
d = {'name': 'Jack', 'age': 10} print(d['name']) # JackTo check
keyindict:# method 1: in print('name' in d) # True # method 2: get() d.get('age') # 10 d.get('major') # None d.get('gender', -1) # -1remove an element
d.pop('name')d.pop()can be dangerous. Hash map hasn't an order. -
set:
# It needs a list to init a set s = set([1, 2, 3])some operation: add, remove:
s.add(4) s.remove(1)Note:
setcan use index to search because hash map isn't ordered.
usage
dict and set are both for search. dict is more useful for managing items, while set is more suitbale for managing conditions, such as 'Jack' in student_set.
condition
if
if condition_1:
statement_1
elif condition_2:
statement_2
...
elif condition_i:
statement_i
else:
statement_n
for
for item in <iterable>:
...
For dict:
d = {'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}
for key in d:
print(key)
# name dob gender
for value in d.values():
print(value)
# jason 2000-01-01 male
for key, value in d.items():
print('key: {}, value: {}'.format(key, value))
# key: name, value: jason key: dob, value: 2000-01-01 key: gender, value: male
For list:
l = ["a", "b", "c"]
for item in l:
print(item)
# a b c
for index, item in enumerate(l):
print('i: {}, item: {}'.format(index, item))
# i:0, item: a i:1, item: b i:2, item: c
simple expressions
-
expression for item in iterable if conditionequl to:
for item in iterable: if condition: expressionexample:
l = [s.strip() for s in text.split(',') if len(s.strip()) > 3] -
expression1 if condition else expression2 for item in iterableequl to:
for item in iterable: if condition: expression1 else: expression2y = [value * 2 + 5 if value > 0 else -value * 2 + 5 for value in x] -
[(xx, yy) for xx in x for yy in y if xx != yy]equl to:
l = [] for xx in x: for yy in y: if xx != yy: l.append((xx, yy))
Error
Some codes will meet errors, such as connecting Database, fetching data from APIs, etc. We need to use try ... except ... to catch errors.
try:
...
except ValueError as err:
# ONLY catch ValueError
print('Value Error: {}'.format(err))
except IndexError as err:
# ONLY catch IndexError
print('Index Error: {}'.format(err))
except Exception as err:
# catch all kinds of error
print('Other error: {}'.format(err))
try ... except ... finally is also very common. The codes in finally will run even we meet errors.
import sys
try:
f = open('file.txt', 'r')
.... # some data processing
except OSError as err:
print('OS error: {}'.format(err))
except:
print('Unexpected error:', sys.exc_info()[0])
finally:
f.close()
Module
.
├── utils
│ ├── utils.py
│ └── class_utils.py
├── src
│ └── sub_main.py
└── main.py
# utils/utils.py
def get_sum(a, b):
return a + b
# utils/class_utils.py
class Encoder(object):
def encode(self, s):
return s[::-1]
class Decoder(object):
def decode(self, s):
return ''.join(reversed(list(s)))
# src/main.py
from proto.mat import Matrix
from utils.mat_mul import mat_mul
a = Matrix([[1, 2], [3, 4]])
b = Matrix([[5, 6], [7, 8]])
print(mat_mul(a, b).data)
########## output ##########
[[19, 22], [43, 50]]
Python use from ... import ... to import module.
Python can export class or function.
Python replaces / by . in the path of import.
The best practice to set path is:
-
use absolute path
-
set the path root in python virtual environment.
-
always change an isolated env for each project
-
add project root into
activatefileexport PYTHONPATH="/home/ubuntu/workspace/your_projects"
-
To test a module, we can use if __name__ == "__main__"
# my-code.py
def my_code:
pass
if __name__ == "__main__":
my_code()
Now, we can run my-code.py in the console: python my-code.py