Усиление побочных эффектов в 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.

Другие вопросы по тегам