[Python-ideas] Exception to the closing brace/bracket/parenthesis indentation for multi-line constructs rule in PEP8 for multi-line function definitions
João Matos
jcrmatos at gmail.com
Sat Oct 15 08:46:56 EDT 2016
Hello,
In the Code lay-out\Indentation section of PEP8 it is stated that
"
The closing brace/bracket/parenthesis on multi-line constructs may either
line up under the first non-whitespace character of the last line of list,
as in:
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
or it may be lined up under the first character of the line that starts the
multi-line construct, as in:
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
"
however, right before that location, there are several examples that do not
comply, like these:
"
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# More indentation included to distinguish this from the rest.
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# Hanging indents should add a level.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
"
That should be corrected but it isn't the main point of this topic.
Assuming that a multi-line function definition is considered a multi-line
construct, I would like to propose an exception to the closing
brace/bracket/parenthesis indentation for multi-line constructs rule in
PEP8.
I my view all multi-line function definitions should only be allowed
options "usual" and "acceptable" shown below, due to better readability.
I present 3 examples (usual, acceptable, horrible) where only the last 2
comply with the current existing rule:
def do_something(parameter_one, parameter_two, parameter_three,
parameter_four,
parameter_five, parameter_six, parameter_seven,
last_parameter):
"""Do something."""
pass
def do_something(parameter_one, parameter_two, parameter_three,
parameter_four,
parameter_five, parameter_six, parameter_seven,
last_parameter
):
"""Do something."""
pass
def do_something(parameter_one, parameter_two, parameter_three,
parameter_four,
parameter_five, parameter_six, parameter_seven,
last_parameter
):
"""Do something."""
pass
The same 3 examples in the new 3.5 typing style:
def do_something(parameter_one: List[str], parameter_two: List[str],
parameter_three: List[str], parameter_four: List[str],
parameter_five: List[str], parameter_six: List[str],
parameter_seven: List[str],
last_parameter: List[str]) -> bool:
"""Do something."""
pass
def do_something(parameter_one: List[str], parameter_two: List[str],
parameter_three: List[str], parameter_four: List[str],
parameter_five: List[str], parameter_six: List[str],
parameter_seven: List[str], last_parameter: List[str]
) -> bool:
"""Do something."""
pass
def do_something(parameter_one: List[str], parameter_two: List[str],
parameter_three: List[str], parameter_four: List[str],
parameter_five: List[str], parameter_six: List[str],
parameter_seven: List[str], last_parameter: List[str]
) -> bool:
"""Do something."""
pass
Best regards,
JM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20161015/29804b3d/attachment.html>
More information about the Python-ideas
mailing list