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=0because.pycare imported prior to your new.pyfiles 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:
loggingmodule is your friend, read official document and some best practices: proper logging level,__name__as logger name …- Simple script can be debugged using
ipdborpudb. - line_profiler is by far the most intuitive profiling tool I’ve used.
- This article introduced segfaults handler, monitoring and more debugging tools.