Should I add a trailing comma after the last argument in a function call?

taper picture taper · Aug 23, 2012 · Viewed 12.9k times · Source

What is better to do?

self.call(1, True, "hi")

or

self.call(1, True, "hi",)

And what in the following cases:

self.call(
    1,
    True,
    "hi"
)

or

self.call(
    1,
    True,
    "hi",
)

?

Reasons for adding a trailing comma in data structures are familiar to me, but what about function calls?

Answer

Jacob Wan picture Jacob Wan · Jul 5, 2013

I think there's no technical reason to avoid trailing commas in function calls, but some people probably do find them distracting. Some may stop and say:

"Hmmm, I wonder if that's really supposed to be there?"

I hesitate to call this a benefit, but one effect of using trailing commas in conjunction with an indented style is to make version control diffs look a little bit cleaner when adding an argument.

For example, a function like this:

def my_fun(a, b, c=None):
    ...

...called like this:

my_fun(
    a='abc',
    b=123
)

...then changed to this:

my_fun(
    a='abc',
    b=123,
    c='def'
)

produces this diff in git:

$ git diff
...
 my_fun(
     a='abc',
-    b=123
+    b=123,
+    c='def'
 )

Whereas,

my_fun(
    a='abc',
    b=123,
)

changed to...

my_fun(
    a='abc',
    b=123,
    c='def',
)

produces this diff in git:

$ git diff
...
 my_fun(
     a='abc',
     b=123,
+    c='def',
 )