Source: https://www.math.univ-toulouse.fr/~cbesse/teaching/L2S_Python/cours.pdf