On 9 October 2016 at 01:25, Steven D'Aprano
On Sat, Oct 08, 2016 at 09:26:13PM +0200, Jelte Fennema wrote:
I have an idea to improve indenting guidelines for dictionaries for better readability: If a value in a dictionary literal is placed on a new line, it should have (or at least be allowed to have) a n additional hanging indent.
Below is an example:
mydict = {'mykey': 'a very very very very very long value', 'secondkey': 'a short value', 'thirdkey': 'a very very very ' 'long value that continues on the next line', }
Looks good to me, except that my personal preference for the implicit string concatenation (thirdkey) is to move the space to the following line, and (if possible) align the parts:
The proposed approach looks good to me, but I'm a strong believe that when you get to situations this complex, the overriding rule should always be "use your judgement". For thirdkey, it's quite possible I'd advise splitting the value out into a named variable. I'd probably lay this out as # Less indent needed for keys, so thirdkey fits better in this case mydict = { 'mykey': 'a very very very very very long value', 'secondkey': 'a short value', 'thirdkey': 'a very very very long value that continues on the next line', } Or # Move the troublesome value out into a named variable val3 = 'a very very very long value that continues on the next line' mydict = { 'mykey': 'a very very very very very long value', 'secondkey': 'a short value', 'thirdkey': val3, } or if I *really* had to split val3, I might go for # Triple-quote/backslash lets you start at the left margin. # And I personally find space-backslash more noticeable than space-quote # Space on the second line is often semantically less consistent (depends on the value) val3 = '''\ a very very very long value that \ continues on the next line''' or even # Just give up on trying to make it a constant val3 = ' '.join([ "a very very very long value that", "continues on the next line" ]) There's also the option of simply giving up on the line length guideline for this one value, and putting the constant on one long line. Lots of possibilities, and which one I'd go for depends on context and the actual content of a (non-toy) example. Paul