Усиление побочных эффектов в Python
Существует ли инструмент, позволяющий вам аннотировать функции / методы как "чистые", а затем анализировать код, чтобы проверить, являются ли указанные функции / методы свободными от побочных эффектов?
1 ответ
Решение
В мире Python этот вопрос не имеет большого смысла, поскольку объекты так много говорят о том, что происходит при вызове функции.
Например, как вы можете определить, является ли следующая функция чистой?
def f(x):
return x + 1
Ответ зависит от того, что х:
>>> 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
Несмотря на то, что функция f выглядит чисто, у операции add для x есть побочный эффект увеличения s.