26

First, I couldn't find an answer to this in PEP 8. That doesn't mean it isn't in there. Feel free to point me at it.

Which style do you prefer?

The first one:

if spam:
    # Do stuff.
    return eggs
else:
    # Maybe do other stuff.
    return parrots

or the second one:

if spam:
    # Do stuff.
    return eggs
# Maybe do other stuff.
return parrots
3
  • 14
    @closers: I understand the subjective, though I did try not to be and argumentative. But off topic? A coding style question?
    – nmichaels
    Commented Feb 17, 2011 at 20:48
  • If there was a "bikeshed problem" category, I'd vote to close your question as such. Lacking that, I felt compelled to answer it instead :) Commented Feb 17, 2011 at 21:02
  • I personally use the 2nd style if the else block is long. It keeps the code flatter and easier to read. Commented Sep 29, 2012 at 10:21

8 Answers 8

13

It depends, if you would return parrots, when you do not return eggs, then the first one is more clear. But if you are trying to catch an error or something like that, the second one is better.

13

The first one!

Explicit is better than implicit.

8

The second one! Less is more, and more is better.

6

It doesn't really matter. If you really need reasons for picking one, use the one that best conveys the reasons behind the code. The first one if both cases are somehow similar or equally important. The second one if you usually return parrots but eggs is a special case.

4

The second one. The same applies not only to return but also to break and continue statements. The else and the consequent indentation are eye-irritating and a waste of space.

2

Neither!

if spam:
    # Do Stuff
    result= eggs
else:
    # Maybe do other stuff
    result= parrots
return result
4
  • 18
    Symptom of excessive exposure to Pascal in infancy :-) Commented Feb 17, 2011 at 20:15
  • 4
    @John Machin: Guilty as charged. And too much formal theory. It's easier to add logging and formal assertions before the return.
    – S.Lott
    Commented Feb 17, 2011 at 20:16
  • 8
    I've never liked One Entry, One Exit style of programming. If you are done with your method and have exactly what you need to return... RETURN! I feel the stack plumps up with wasted result variables. Commented Feb 17, 2011 at 20:45
  • 2
    Some logging and assertions can be put in a decorator. Others not so easily, so good point. Commented Feb 18, 2011 at 8:17
0

I think it depends on the "do stuff" part. Both are acceptable.

-8

I don't know python, but I do :

return spam if eggs else parrots

Edit : I didn't notice the Do stuff part. In that case, I would create another method or function (whatever it is called in python) for each branch.

2
  • 4
    It's spelled: return eggs if spam else parrots in Python.
    – S.Lott
    Commented Feb 17, 2011 at 20:03
  • 13
    You left out the #do stuffs. Plus, you're right about not knowing python.
    – Wooble
    Commented Feb 17, 2011 at 20:03

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.