2012-02-27 14 views
7

Mi chiedo se qualcuno possa escogitare un modo per verificare se una funzione deve restituire un valore significativo in Python. Cioè, per controllare se il valore di ritorno verrà utilizzato per qualsiasi cosa. Immagino che la risposta sia no, ed è meglio ristrutturare il flusso del mio programma. La funzione in questione estrae i suoi valori di ritorno da un socket di rete. Se il valore restituito non si sta per abituare, non voglio sprecare le risorse recuperando il risultato.Verificare se c'è qualcosa "in attesa" del valore di ritorno di una funzione

Ho provato già a utilizzare traceback per scoprire la linea chiamante, ma non ha funzionato. Ecco un esempio di ciò che avevo in mente:

>>> def func(): 
... print should_return() 
... 
>>> func() 
False 
>>> ret = func() 
True 

La funzione "sa" che il suo valore di ritorno è stato assegnato.

Qui è la mia soluzione attuale:

>>> def func(**kwargs): 
... should_return = kwargs.pop('_wait', False) 
... print should_return 
... 
>>> func() 
False 
>>> ret = func(_wait=True) 
True 
+4

Tutte le funzioni in Python restituiscono sempre. Se non si restituisce esplicitamente, le funzioni restituiscono 'Nessuna'. – birryree

+2

Le funzioni Python non restituiscono, infatti, sempre. Se restituiscono, tuttavia, restituiscono sempre un valore, che, se non specificato, è Nessuno. – Arafangion

+0

Capisco che, ma il più delle volte una funzione che restituisce 'Nessuno' equivale a non restituire nulla. In questo caso, ho bisogno di controllare se deve restituire qualcosa di diverso da "Nessuno". – Violet

risposta

3

La stessa seconda linea del corpo di import this dice tutto: "esplicito è meglio che implicito". In questo caso, se fornisci un argomento opzionale, il codice sarà più ovvio (e quindi più facile da capire), più semplice, più veloce e più sicuro. Mantenerlo come argomento separato con un nome come wait.

Mentre con difficoltà è possibile implementarlo magicamente, sarebbe un codice sgradevole, incline a rompere le nuove versioni di Python e non ovvio. Evita quella via; là giace il sentiero verso la pazzia.

4

Tutte le funzioni restituiscono un valore quando si completa.

Se stai chiedendo se devono tornare a tutti, allora si sta effettivamente chiedendo circa The Halting Problem

+0

Capisco che qualsiasi funzione restituisca un valore, mi chiedo se sia possibile determinare se una funzione debba restituire un valore _meaningful_. – Violet

+0

Cosa intendi con "significativo"? Questo, è ancora lo stesso problema di arresto. – Arafangion

0

Tutte le funzioni in Python restituiscono sempre. Se non si restituisce esplicitamente, le funzioni restituiscono Nessuno.

===========

def func(): while True: passaggio

Questa funzione non restituisce.

Non esiste alcun modo per determinare se una funzione arbitraria verrà restituita. Se puoi, hai risolto il problema di Turing.

0

Si potrebbe considerare di restituire un futuro, o "promessa". Cioè, restituisce un'altra funzione che, una volta eseguita, esegue il lavoro necessario per determinare effettivamente il risultato. Mi sembra di pensare che tu voglia una valutazione pigra, che è "valutare solo ciò di cui hai bisogno" (più o meno), piuttosto che la tua domanda, che chiede confusamente: "Valuta solo se restituisce un valore, che potrebbe essere necessario".

Problemi correlati