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.

Comments

Enter at least 15 characters
Enter at least 15 characters
13

The first one!

Explicit is better than implicit.

Comments

Enter at least 15 characters
Enter at least 15 characters
8

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

Comments

Enter at least 15 characters
Enter at least 15 characters
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.

Comments

Enter at least 15 characters
Enter at least 15 characters
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.

Comments

Enter at least 15 characters
Enter at least 15 characters
2

Neither!

if spam:
    # Do Stuff
    result= eggs
else:
    # Maybe do other stuff
    result= parrots
return result

4 Comments

Enter at least 15 characters
Symptom of excessive exposure to Pascal in infancy :-)
Enter at least 15 characters
Enter at least 15 characters
@John Machin: Guilty as charged. And too much formal theory. It's easier to add logging and formal assertions before the return.
Enter at least 15 characters
Enter at least 15 characters
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.
Enter at least 15 characters
Enter at least 15 characters
Some logging and assertions can be put in a decorator. Others not so easily, so good point.
Enter at least 15 characters
Enter at least 15 characters
Enter at least 15 characters
0

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

Comments

Enter at least 15 characters
Enter at least 15 characters
-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 Comments

Enter at least 15 characters
It's spelled: return eggs if spam else parrots in Python.
Enter at least 15 characters
Enter at least 15 characters
You left out the #do stuffs. Plus, you're right about not knowing python.
Enter at least 15 characters
Enter at least 15 characters
Enter at least 15 characters

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.