Esiste uno strumento che consente di annotare funzioni/metodi come "puro" e quindi analizza il codice per verificare se tali funzioni/metodi sono privi di effetti collaterali?Enforcing di effetti collaterali in python
5
A
risposta
9
Nel mondo Python, la domanda non ha molto senso dal momento che gli oggetti hanno così tanto da dire in ciò che accade in una chiamata di funzione.
Ad esempio, come si può sapere se la seguente funzione è pura?
def f(x):
return x + 1
La risposta dipende da ciò che x è:
>>> class A(int):
def __add__(self, other):
global s
s += 1
return int.__add__(self, other)
>>> def f(x):
return x + 1
>>> s = 0
>>> f(A(1))
2
>>> s
1
Anche se la funzione f sembra pura, l'operazione di aggiunta sul x ha l'effetto collaterale di incrementare s .
Quello che * si * può fare è controllare se 'f' è puro ** assumendo **' type (x) == int'. Poiché Python è digitato in modo dinamico, dovresti aggiungere manualmente annotazioni di tipo. – Robin