Hva er den beste måten å returnere flere verdier fra en funksjon i Python?

stemmer
60

Jeg har en funksjon der jeg trenger å gjøre noe til en streng. Jeg trenger den funksjon å returnere en boolsk verdi som angir hvorvidt operasjonen er vellykket, og jeg også behov for å returnere den modifiserte strengen.

I C #, vil jeg bruke en ut-parameter for strengen, men det er ingen tilsvarende i Python. Jeg er fortsatt veldig nytt for Python og det eneste jeg kan tenke på er å returnere et tuppel med boolean og modifisert streng.

Relaterte spørsmål: Er det Pytonske for en funksjon for å returnere flere verdier?

Publisert på 01/09/2008 klokken 22:01
kilden bruker
På andre språk...                            


5 svar

stemmer
120

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

succeeded, b = f("a") # Automatic tuple unpacking
Svarte 01/09/2008 kl. 22:04
kilden bruker

stemmer
28

Hvorfor ikke kaste et unntak hvis operasjonen ikke var vellykket? Personlig pleier jeg å være av den oppfatning at hvis du trenger å returnere mer enn én verdi fra en funksjon, bør du revurdere om du gjør ting riktig måte eller bruke et objekt.

Men mer direkte til poenget, hvis du kaster et unntak, du tvinge dem til å håndtere problemet. Hvis du prøver å returnere en verdi som indikerer svikt, er det veldig godt mulig noen kunne ikke sjekke verdien og ende opp med noen potensielt vanskelig å feilsøke feil.

Svarte 01/09/2008 kl. 22:09
kilden bruker

stemmer
15

Returnere et tuppel.

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

success, modified_string = f(something)
Svarte 01/09/2008 kl. 22:03
kilden bruker

stemmer
7

Returnere et tuppel er den vanlige måten å gjøre dette i Python.

Svarte 01/09/2008 kl. 22:03
kilden bruker

stemmer
3

Kaster et unntak for svikt er en god måte å gå, og hvis du returnerer en rekke forskjellige verdier, kan du returnere et tuppel. For den konkrete saken du siterer, tar jeg ofte en mellom tilnærming: returnerer den modifiserte streng på suksess, og returnere Ingen på svikt. Jeg er nok av en unreconstructed C programmerer ønsker å returnere en NULL-peker til char på svikt.

Hvis jeg skulle skrive en rutine som skal brukes som en del av et større bibliotek og fortært av andre utviklere, vil jeg kaste et unntak på fiasko. Når jeg spiser min egen intern testing vil jeg trolig gå tilbake forskjellige typer og test på retur.

Svarte 02/09/2008 kl. 03:15
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more