¿Existe alguna herramienta que le permita anotar funciones/métodos como "puros" y luego analiza el código para comprobar si dichas funciones/métodos son libres de efectos secundarios?Aplicación de efectos secundarios en python
5
A
Respuesta
9
En el mundo de Python, la pregunta no tiene mucho sentido ya que los objetos tienen mucho que decir en lo que sucede en una llamada a función.
Por ejemplo, ¿cómo podría saber si la siguiente función es pura?
def f(x):
return x + 1
La respuesta depende de lo x es:
>>> 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
Aunque la función f se ve pura, la operación de adición en x tiene el efecto secundario de incrementar s .
Cuestiones relacionadas
- 1. Cierre de Python con efectos secundarios
- 2. Programación funcional: Efectos secundarios
- 3. LD_LIBRARY_PATH efectos secundarios
- 4. efectos secundarios LINQ
- 5. Task LongRunning ¿efectos secundarios?
- 6. MongoDB: efectos secundarios de mapReduce
- 7. Catching assert() con efectos secundarios
- 8. efectos secundarios sobre otros recursos
- 9. Expresiones sin efectos secundarios en C++
- 10. ¿Efectos secundarios en un iterador considerados perjudiciales?
- 11. cortocircuito de evaluación y los efectos secundarios
- 12. Funciones anidadas: ¿uso inapropiado de efectos secundarios?
- 13. Clojure - Efectos secundarios sucediendo fuera de servicio
- 14. Funciones de pruebas unitarias con efectos secundarios?
- 15. Efectos secundarios dentro de un typeof() expresión
- 16. C++ 11 move constructor con efectos secundarios
- 17. ¿Cuándo exactamente un método tiene efectos secundarios?
- 18. Paradigmas de C#: Efectos secundarios en las listas
- 19. Los efectos secundarios de la redefinición de $ stdout y stderr $ en una aplicación Rails
- 20. Efectos secundarios de llamar a Assembly.Load varias veces
- 21. Detectando mouse clic en div con Javascript sin efectos secundarios
- 22. ¿Qué efectos secundarios tiene la palabra clave 'nuevo' en JavaScript?
- 23. Eliminar elementos en un bucle for sin efectos secundarios?
- 24. ¿Cuáles son los efectos secundarios de usar EmptyWorkingSet?
- 25. ¿Cuáles son los efectos secundarios de Data :: Dumper()?
- 26. ¿Cómo funcionan los efectos secundarios del modelo de idiomas funcionales?
- 27. Enfoque para los emisores libres de efectos secundarios
- 28. ¿Terminología para una función determinística sin efectos secundarios?
- 29. Peor peor: ¿efectos secundarios o pasar objetos masivos?
- 30. ¿Qué son exactamente las expresiones que producen * efectos secundarios *?
Lo que * puedes * hacer es comprobar si 'f' es puro ** suponiendo **' tipo (x) == int'. Sin embargo, dado que Python está tipado dinámicamente, debería agregar anotaciones de tipo manualmente. – Robin