Domanda

Ho una funzione in cui devo fare qualcosa su una stringa.Ho bisogno che la funzione restituisca un valore booleano che indichi se l'operazione è riuscita o meno e devo anche restituire la stringa modificata.

In C#, utilizzerei un parametro out per la stringa, ma non esiste un equivalente in Python.Sono ancora molto nuovo in Python e l'unica cosa che mi viene in mente è restituire una tupla con la stringa booleana e modificata.

Domanda correlata: È Pythonic che una funzione restituisca più valori?

È stato utile?

Soluzione

def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

succeeded, b = f("a") # Automatic tuple unpacking

Altri suggerimenti

Perché non lanciare un'eccezione se l'operazione non ha avuto successo?Personalmente, tendo a essere dell'opinione che se è necessario restituire più di un valore da una funzione, è necessario riconsiderare se si sta facendo le cose nel modo giusto o si utilizza un oggetto.

Ma più direttamente al punto, se lanci un'eccezione, li costringi ad affrontare il problema.Se provi a restituire un valore che indica un errore, è molto probabile che qualcuno non riesca a controllare il valore e si ritrovi con alcuni errori potenzialmente difficili da eseguire il debug.

Restituisce una tupla.

def f(x):
    # do stuff
    return (True, modified_string)

success, modified_string = f(something)

Restituire una tupla è il modo usuale per farlo in Python.

Lanciare un'eccezione in caso di errore è un buon modo di procedere e, se restituisci molti valori diversi, puoi restituire una tupla.Per il caso specifico che stai citando, spesso seguo un approccio intermedio:restituisce la stringa modificata in caso di successo e restituisce None in caso di fallimento.Sono abbastanza programmatore C non ricostruito da voler restituire un puntatore NULL al carattere in caso di errore.

Se stessi scrivendo una routine da utilizzare come parte di una libreria più grande e utilizzata da altri sviluppatori, genererei un'eccezione in caso di fallimento.Quando mangio il mio cibo per cani, probabilmente restituirò tipi diversi e li testerò al ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top