2012-05-09 4 views

ответ

9

В мире 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 

Хотя функции е выглядит чистым, операция добавления на х имеет побочный эффект приращением s ,

+0

Что вы * можете * сделать, это проверить, является ли 'f' чистым **, предполагая **' type (x) == int'. Поскольку Python динамически типизирован, вам придется добавлять аннотации типов вручную. – Robin

Смежные вопросы