[Python] Questo, da Python, non me lo sarei mai aspettato

Marco Beri marcoberi a gmail.com
Lun 12 Feb 2024 09:45:38 CET


Il giorno lun 12 feb 2024 alle ore 09:36 Daniele Zambelli <
daniele.zambelli a gmail.com> ha scritto:

> Lo strano per me è che il valore di default dovrebbe essere una lista
> vuota ogni volta che chiamo la funzione invece la seconda volta è una
> lista con i valori che sono stati inseriti dalla funzione nella
> chiamata precedente.
> Cioè due chiamate identiche della funzione hanno effetti differenti.
> Mi pare che non rispetti il principio di non side effect (se si dice così).
>

Daniele,
il non side effect non si applica quando il valore di default di un
parametro è un mutable (lista o set o dict).
Pensa che a volte si usa questo per memoizzare brutalmente una funzione.

Esempio:

def quadrato(n, cache={}):
    try:
        return cache[n]
    except KeyError:
        pass
    print("calcolo")
    q = cache[n] = n*n
    return q

>>> quadrato(10)
calcolo
100
>>> quadrato(10)
100


Ciao.
Marco.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20240212/38a69ff4/attachment-0001.html>


Maggiori informazioni sulla lista Python