Python Developing Notes
This post will try not to repeat Code Complete and PEP-8 and talk about Python specifically.
Common sense:
- Do NOT overwrite system’s python, unless you know what you’re doing: Gentoo user or have full backup.
- virtualenv per project, do not
sudo pip install
, it’s likeusing namespace std;
+import <bits/stdc++.h>
. export PYTHONBYTECODEBASE=0
because.pyc
are imported prior to your new.py
files with bugs fixed.- Time complexity of common operations.
awesome-*
projects are mostly bullshit : if you know what library/framework to choose, you don’t need them; if you don’t, you can’t distinguish good from bad ones(I’m not taking awesome-python personally) until you start using and reading others code.
Convenience:
pyflakes
+pep8
+pylint
(and more) to check your code, a pre-commit hook could be overkill, but integrating them with CI should be trivial.- Meta programming: jsondatabase shows good use of
__get__
(though can’t really appreciate this silver bullet method) - Pythonic code review introduces pythonic/convenient syntax like
namedtuple
, and more importantly, what to focus when reviewing code.
Traps/gotchas:
- This post is a good summary.
- Gotchas are caused by too much expectations(why this does not work?!), try to have minimal expectations and write codes that you can understand and you’re sure they will work.
Debug:
logging
module is your friend, read official document and some best practices: proper logging level,__name__
as logger name …- Simple script can be debugged using
ipdb
orpudb
. - line_profiler is by far the most intuitive profiling tool I’ve used.
- This article introduced segfaults handler, monitoring and more debugging tools.