6

関数/メソッドに「純粋」な注釈を付け、コードを分析して、その関数/メソッドに副作用がないかどうかをテストできるツールはありますか?

4

1 に答える 1

11

Python の世界では、この質問はあまり意味がありません。なぜなら、オブジェクトは関数呼び出しで何が起こるかについて非常に多くの発言権を持っているからです。

たとえば、次の関数が純粋かどうかはどうすればわかりますか?

def f(x):
   return x + 1

答えは、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

関数fは純粋に見えますが、 xの加算操作にはsをインクリメントするという副作用があります。

于 2012-05-09T04:45:06.963 に答える