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 .
Problemi correlati
- 1. LD_LIBRARY_PATH effetti collaterali
- 2. Q_UNUSED ha effetti collaterali?
- 3. Attività LongRunning effetti collaterali?
- 4. C# ottimizzazioni ed effetti collaterali
- 5. effetti collaterali su altre risorse
- 6. Effetti collaterali nelle espressioni generiche
- 7. C++: funzione di ottimizzazione senza effetti collaterali
- 8. Java 8 Consumer ed effetti collaterali
- 9. Le importazioni Has Haskell hanno effetti collaterali?
- 10. Effetti collaterali della chiamata Assembly.Load più volte
- 11. VLA e effetti collaterali nell'operando sizeof
- 12. Approccio ai setter senza effetti collaterali
- 13. Come gestire gli effetti collaterali complessi in Redux?
- 14. Quali effetti collaterali ha la parola "nuovo" in JavaScript?
- 15. Rimuovere gli elementi in un ciclo for senza effetti collaterali?
- 16. Ci sono effetti collaterali di ritorno da una dichiarazione using()?
- 17. Ci sono effetti collaterali del ritorno dall'interno di un'istruzione foreach?
- 18. Quali sono gli effetti collaterali dell'utilizzo di EmptyWorkingSet?
- 19. Le funzioni di test unitario con effetti collaterali?
- 20. Esistono effetti collaterali dell'utilizzo di più file string.xml?
- 21. Perché un riduttore Redux deve essere privo di effetti collaterali?
- 22. javascript - Gli effetti collaterali di congelamento un prototipo costruttore
- 23. Ci sono effetti collaterali dell'utilizzo di molte funzioni statiche?
- 24. Può sostenere le operazioni di TF con effetti collaterali?
- 25. Quali sono gli effetti collaterali della disattivazione dell'ispezione LINT?
- 26. Sccl considera se una funzione ha effetti collaterali durante l'ottimizzazione?
- 27. Perché utilizzare i cattivi effetti collaterali nei costruttori JavaScript?
- 28. Gli effetti collaterali sono possibili nella pura programmazione funzionale
- 29. Esiste un modo per testare l'unità contro gli effetti collaterali?
- 30. git branch -m ha effetti collaterali per altri sviluppatori?
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