Why does PEP 8 recommend not having spaces around = in a keyword argument or a default parameter value?
Is this inconsistent with recommending spaces around every other
For me it makes code more readable and is thus a good convention.
I think the key difference in terms of style between variable assignments and function keyword assignments is that there should only be a single =
on a line for the former, whereas generally there are multiple =
s on a line for the latter.
If there were no other considerations, we would prefer foo = 42
to foo=42
, because the latter is not how equals signs are typically formatted, and because the former nicely visually separates the variable and value with whitespace.
But when there are multiple assignments on one line, we prefer f(foo=42, bar=43, baz=44)
to f(foo = 42, bar = 43, baz = 44)
, because the former visually separates the several assignments with whitespace, whereas the latter does not, making it a bit harder to see where the keyword/value pairs are.
Here's another way of putting it: there is a consistency behind the convention. That consistency is this: the "highest level of separation" is made visually clearer via spaces. Any lower levels of separation are not (because it would be confused with the whitespace separating the higher level). For variable assignment, the highest level of separation is between variable and value. For function keyword assignment, the highest level of separation is between the individual assignments themselves.