def somme(li):
    """
    calcule la somme des éléments d'un tableau

    @param      li      tableau
    @return             somme

    .. exref::
        :tag: Base
        :title: calcul d'une somme

        Le calcul d'une somme fait toujours intervenir une boucle car le langage
        Python ne peut faire des additions qu'avec deux nombres.
        Le schéma est toujours le même : initialisation et boucle.

        ::

            li = [ 0, 434, 43, 6456 ]
            s  = 0                       # initialisation
            for l in li :                # boucle
                s += l                   # addition

        Ce code est équivalent à la fonction `sum <https://docs.python.org/3/library/functions.html#sum>`_.
        Dans ce cas où la somme intègre le résultat d'une fonction et non les éléments d'une liste,
        il faudrait écrire :

        ::

            def fonction (x) : return x*x
            s  = 0
            for l in li : s += fonction (l)

        Et ces deux lignes pourraient être résumées en une seule grâce
        à l'une de ces instructions :

        ::

            s = sum ( [fonction (l) for l in li] )
            s = sum ( fonction (l) for l in li )
            s = sum ( map (fonction, li) )

        L'avantage des deux dernières instructions est qu'elles évitent
        la création d'une liste intermédiaire,
        c'est un point à prendre en compte si la liste sur laquelle opère la
        somme est volumineuse.
    """
    return sum(li)
