How can I denote unused function arguments?
Solution 1
Here's what I do with unused arguments:
def f(a, *unused):
return a
Solution 2
A funny way I just thought of is to delete the variable:
def f(foo, unused1, unused2, unused3):
del unused1, unused2, unused3
return foo
This has numerous advantages:
- The unused variable can still be used when calling the function both as a positional argument and as a keyword argument.
- If you start to use it later, you can't since it's deleted, so there is less risk of mistakes.
- It's standard python syntax.
- PyCharm does the right thing! (As of 2020, PyCharm no longer does the right thing :( tracking this at https://youtrack.jetbrains.com/issue/PY-39889 )
- PyLint won't complain and using
del
is the solution recommended in the PyLint manual.
Solution 3
The underscore is used for things we don't care about and the * in *args denotes a list of arguments. Therefore, we can use *_ to denote a list of things we don't care about:
def foo(bar, *_):
return bar
It even passes PyCharm's checks.
Solution 4
You can use '_' as prefix, so that pylint will ignore these parameters:
def f(a, _b, _c):
Solution 5
In order to avoid "unused variable" inspection messages for unused *args and/or **kwargs, I replace args
and kwargs
by _
and __
:
def f(a, b, *_, **__):
...
In addition to remove messages, it clearly shows that you don't care about these arguments.
I can't say if it is a really universal solution, but it worked everywhere I've used it until now.
Frerich Raabe
Full Stack Developer @ BetterDoc. You can reach me at frerich(DOT)raabe(AT)gmail(DOT)com.
Updated on July 08, 2022Comments
-
Frerich Raabe almost 2 years
When "deconstructing" a tuple, I can use
_
to denote tuple elements I'm not interested in, e.g.>>> a,_,_ = (1,2,3) >>> a 1
Using Python 2.x, how can I express the same with function arguments? I tried to use underscores:
>>> def f(a,_,_): return a ... File "<stdin>", line 1 SyntaxError: duplicate argument '_' in function definition
I also tried to just omit the argument altogether:
>>> def f(a,,): return a File "<stdin>", line 1 def f(a,,): return a ^ SyntaxError: invalid syntax
Is there another way to achieve the same?