How can I denote unused function arguments?

59,093

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.

Share:
59,093
Frerich Raabe
Author by

Frerich Raabe

Full Stack Developer @ BetterDoc. You can reach me at frerich(DOT)raabe(AT)gmail(DOT)com.

Updated on July 08, 2022

Comments

  • Frerich Raabe
    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?