python – Styling multi-line conditions in if statements?

python – Styling multi-line conditions in if statements?

You dont need to use 4 spaces on your second conditional line. Maybe use:

if (cond1 == val1 and cond2 == val2 and 
       cond3 == val3 and cond4 == val4):
    do_something

Also, dont forget the whitespace is more flexible than you might think:

if (   
       cond1 == val1 and cond2 == val2 and 
       cond3 == val3 and cond4 == val4
   ):
    do_something
if    (cond1 == val1 and cond2 == val2 and 
       cond3 == val3 and cond4 == val4):
    do_something

Both of those are fairly ugly though.

Maybe lose the brackets (the Style Guide discourages this though)?

if cond1 == val1 and cond2 == val2 and 
   cond3 == val3 and cond4 == val4:
    do_something

This at least gives you some differentiation.

Or even:

if cond1 == val1 and cond2 == val2 and 
                       cond3 == val3 and 
                       cond4 == val4:
    do_something

I think I prefer:

if cond1 == val1 and 
   cond2 == val2 and 
   cond3 == val3 and 
   cond4 == val4:
    do_something

Heres the Style Guide, which (since 2010) recommends using brackets.

Ive resorted to the following in the degenerate case where its simply ANDs or ORs.

if all( [cond1 == val1, cond2 == val2, cond3 == val3, cond4 == val4] ):

if any( [cond1 == val1, cond2 == val2, cond3 == val3, cond4 == val4] ):

It shaves a few characters and makes it clear that theres no subtlety to the condition.

python – Styling multi-line conditions in if statements?

Someone has to champion use of vertical whitespace here! 🙂

if (     cond1 == val1
     and cond2 == val2
     and cond3 == val3
   ):
    do_stuff()

This makes each condition clearly visible. It also allows cleaner expression of more complex conditions:

if (    cond1 == val1
     or 
        (     cond2_1 == val2_1
          and cond2_2 >= val2_2
          and cond2_3 != bad2_3
        )
   ):
    do_more_stuff()

Yes, were trading off a bit of vertical real estate for clarity. Well worth it IMO.

Leave a Reply

Your email address will not be published. Required fields are marked *