What’s the best way to return multiple values from a function?

I have a function where I need to do something to a string. I need the function to return a boolean indicating whether or not the operation succeeded, and I also need to return the modified string.

In C#, I would use an out parameter for the string, but there is no equivalent in Python. I’m still very new to Python and the only thing I can think of is to return a tuple with the boolean and modified string.

Related question: Is it pythonic for a function to return multiple values?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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

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

Method 2

Why not throw an exception if the operation wasn’t successful? Personally, I tend to be of the opinion that if you need to return more than one value from a function, you should reconsider if you’re doing things the right way or use an object.

But more directly to the point, if you throw an exception, you’re forcing them to deal with the problem. If you try to return a value that indicates failure, it’s very well possible somebody could not check the value and end up with some potentially hard to debug errors.

Method 3

Return a tuple.

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

success, modified_string = f(something)

Method 4

Returning a tuple is the usual way to do this in Python.

Method 5

Throwing an exception for failure is one good way to proceed, and if you’re returning a lot of different values, you can return a tuple. For the specific case you’re citing, I often take an intermediate approach: return the modified string on success, and return None on failure. I’m enough of an unreconstructed C programmer to want to return a NULL pointer to char on failure.

If I were writing a routine to be used as part of a larger library and consumed by other developers, I’d throw an exception on failure. When I’m eating my own dogfood, I’ll probably return different types and test on return.

Method 6

You can use return statement with multiple expressions


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x