2012-05-09 13 views

risposta

9

Nel mondo Python, la domanda non ha molto senso dal momento che gli oggetti hanno così tanto da dire in ciò che accade in una chiamata di funzione.

Ad esempio, come si può sapere se la seguente funzione è pura?

def f(x): 
    return x + 1 

La risposta dipende da ciò che 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 

Anche se la funzione f sembra pura, l'operazione di aggiunta sul x ha l'effetto collaterale di incrementare s .

+0

Quello che * si * può fare è controllare se 'f' è puro ** assumendo **' type (x) == int'. Poiché Python è digitato in modo dinamico, dovresti aggiungere manualmente annotazioni di tipo. – Robin

Problemi correlati