Python is a very versatile programming language, and it has a very flexible syntax. Therefore, it is also very easy to write ugly code in python. This chapter reviews a number of guidelines and conventions widely accepted by the community.
PEP 8 is a style guide for python code. It introduces new rules where the syntax leaves them open. As an example:
# Not PEP8 compliant
a=2*3
# PEP8 compliant
a = 2*3
PEP8 gives guidelines, not strict rules. It is your choice to comply with them or not. As a matter of fact however, many open source projects have adopted PEP8 and require to use it if you want to contribute. If you want to use it too, a good choice is to turn on PEP8 checking in your favorite IDE (in Spyder: Tools -> Preferences -> Editor -> Code Introspection/Analysis ->
Tick Real-time code style analysis
for PEP8 style analysis).
Code space is less important than your time. Give meaningful name to your variables and functions, even if it makes them quite long! For example, prefer:
def fahrenheit_to_celsius(temp):
"""Converts degrees Fahrenheits to degrees Celsius."""
to the shorter but less explicit:
def f2c(tf):
"""Converts degrees Fahrenheits to degrees Celsius."""
Separation of concerns is an important design principle for separating a computer program into distinct sections, such that each section addresses a separate concern. This increases the code readability and facilitates unit testing.
For example, a scientific script can often be organized in well defined steps:
Each of these steps and sub-steps should be separated in different functions, maybe even in different scripts.
Write comments in your code, and document the functions with docstrings. Here again there are some conventions that I recommend to follow.
Note that this is useful even if you don't plan to share your code. At the very last there is at least one person reading your code: yourself! And it's nice to be nice to yourself ;-)
Abstruse Goose made a funny comic about code documentation: http://abstrusegoose.com/432
It is impossible to get all things right at the first shot. Some real-life examples:
All these are good indicators that your code needs some refactoring. This happens often (even for big programs) and becomes more and more difficult the longer you wait. For example, in the process of doing your assignments for next week you might need to revisit your code. Here also, good IDEs can help you in this process, either by letting you know where the functions are used, and by letting you know when your tests fail.
import this
Back to the table of contents, or jump to this week's assignment.