**Question :**

**Is it pythonic for a function to return multiple values?,**

**Answer :**

In python, you can have a function return multiple values. Here’s a contrived example:

`def divide(x, y): quotient = x/y remainder = x % y return quotient, remainder (q, r) = divide(22, 7) `

This seems very useful, but it looks like it can also be abused (“Well..function X already computes what we need as an intermediate value. Let’s have X return that value also”).

When should you draw the line and define a different method?

,

Absolutely (for the example you provided).

### Tuples are first class citizens in Python

There is a builtin function `divmod()`

that does exactly that.

`q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y + mod == x `

There are other examples: `zip`

, `enumerate`

, `dict.items`

.

`for i, e in enumerate([1, 3, 3]): print "index=%d, element=%s" % (i, e) # reverse keys and values in a dictionary d = dict((v, k) for k, v in adict.items()) # or d = dict(zip(adict.values(), adict.keys())) `

BTW, parentheses are not necessary most of the time.

Citation from

Tuples may be constructed in a number of ways:

- Using a pair of parentheses to denote the empty tuple: ()
- Using a trailing comma for a singleton tuple: a, or (a,)
- Separating items with commas: a, b, c or (a, b, c)
- Using the tuple() built-in: tuple() or tuple(iterable)

### Functions should serve single purpose

Therefore they should return a single object. In your case this object is a tuple. Consider tuple as an ad-hoc compound data structure. There are languages where almost every single function returns multiple values (list in Lisp).

Sometimes it is sufficient to return `(x, y)`

instead of `Point(x, y)`

.

### Named tuples

With the introduction of named tuples in Python 2.6 it is preferable in many cases to return named tuples instead of plain tuples.

`>>> import collections >>> Point = collections.namedtuple('Point', 'x y') >>> x, y = Point(0, 1) >>> p = Point(x, y) >>> x, y, p (0, 1, Point(x=0, y=1)) >>> p.x, p.y, p[0], p[1] (0, 1, 0, 1) >>> for i in p: ... print(i) ... 0 1 `

That’s the answer **Is it pythonic for a function to return multiple values?,** Hope this helps those looking for an answer. Then we suggest to do a search for the next question and find the answer only on our site.

**Disclaimer :**

The answers provided above are only to be used to guide the learning process. The questions above are open-ended questions, meaning that many answers are not fixed as above. I hope this article can be useful, Thank you