Effective-Python Use enumerate than range Raising exception is better than returning None Use generator if function returns list Use None as dynamic default parameter, with docstring Use super() to initiate base class Use attributes than getter/setter subprocess for child process Make docstring on every funcs, classes, modules