89

タプルを「分解」するとき、私_は興味のないタプル要素を示すために使用できます。

>>> a,_,_ = (1,2,3)
>>> a
1

Python 2.xを使用して、関数の引数で同じことを表現するにはどうすればよいですか?アンダースコアを使用しようとしました:

>>> def f(a,_,_): return a
...
  File "<stdin>", line 1
SyntaxError: duplicate argument '_' in function definition

また、引数を完全に省略しようとしました。

>>> def f(a,,): return a
  File "<stdin>", line 1
    def f(a,,): return a
        ^
SyntaxError: invalid syntax

同じことを達成する別の方法はありますか?

4

7 に答える 7

122

私が今考えた面白い方法は、変数を削除することです。

def f(foo, unused1, unused2, unused3):
    del unused1, unused2, unused3
    return foo

これには多くの利点があります。

  • 未使用の変数は、位置引数とキーワード引数の両方として関数を呼び出すときに引き続き使用できます。
  • 後で使い始めると削除されてしまうので、間違えるリスクが少なくなります。
  • これは標準のPython構文です。
  • PyCharmは正しいことをします!(2020年の時点で、PyCharmは正しいことをしなくなりました:( https://youtrack.jetbrains.com/issue/PY-39889でこれを追跡します)
  • PyLintは文句を言わず、使用することはPyLintマニュアルdelで推奨されている解決策です。
于 2013-02-12T15:32:30.763 に答える
67

アンダースコアは気にしないものに使用され、 *args の * は引数のリストを示します。したがって、 *_ を使用して、気にしないもののリストを示すことができます。

def foo(bar, *_):
    return bar

PyCharm のチェックにも合格します。

于 2016-03-20T21:56:59.010 に答える
48

pylint がこれらのパラメーターを無視するように、「_」をプレフィックスとして使用できます。

def f(a, _b, _c):
于 2018-04-02T11:28:28.260 に答える
36

未使用の引数で行うことは次のとおりです。

def f(a, *unused):
    return a
于 2012-04-05T09:13:02.120 に答える
0

受け入れられた答えは悪いと思いますが、引数を処理する「Perlの方法」と呼ぶべきものを使用すれば、それでも機能します(Perlを本当に知りませんが、sub構文を見た後、それを学ぼうとするのをやめました.手動引数アンパックを使用):

あなたの関数には3つの引数があります - これは呼び出されるものです(ダックタイピング、覚えていますか?)。したがって、次のようになります。

def funfun(a, b, c):
    return b * 2

2 つの未使用パラメータ。しかしここで、改善されたラーズマンのアプローチに入ります。

def funfun(*args):
    return args[1] * 2

そして、警告が表示されます...

しかし、私はまだ箱入りの方法を楽しんでいます:

def funfun(a, b, c):
    del a, c
    return b * 2

パラメータ名の自己文書化品質を維持します。それらは機能であり、バグではありません。

しかし、言語自体が強制するわけではありません。逆に、すべての関数に署名(*args, **kwargs)を持たせ、引数の解析を毎回手動で行うこともできます。あなたに与えられるコントロールのレベルを想像してみてください。また、「署名」(引数の数と意味) を変更した後に非推奨の方法で呼び出された場合の例外はもうありません。これは検討する価値のあるものです;)

于 2015-01-07T10:13:56.527 に答える
0

args とキーワード arg の両方がある場合は、使用する必要があります

def f(a, *args, **kwargs):
    return a
于 2012-04-05T09:19:01.790 に答える