web-dev-qa-db-ja.com

forループで未使用の変数を宣言するにはどうすればよいですか?

このようなリストの理解(たとえば)がある場合:

['' for x in myList]

リスト内のすべての要素に空の文字列を含む新しいリストを効果的に作成するために、xを使用することはありません。これをより簡潔に書く方法はあるので、未使用のx変数を宣言する必要はありませんか?

70
Ramy

_は、for-loopおよびTuple割り当てで無視されるメンバーの標準プレースホルダー名です。

['' for _ in myList]

[a+d for a, _, _, d, _ in fiveTuples]

ところで、リストを理解することなくリストを書くことができます(文字列、整数などのような不変のメンバーのリストを作成したい場合)。

[''] * len(myList)
110
kennytm

いいえ。禅が言っているように、特別なケースは規則を破るほど特別ではありません。ループの特別なケースは、反復されるもののアイテムを使用しないループと、アンパックする「ターゲット」があるというルールです。

ただし、変数名として_を使用できます。これは通常、「意図的に使用されていない」と理解されます(PyLintなどでもこれを認識し、尊重しています)。

19
user395760

変数名がdummy*と同じトリックを行うため、_(開始Wordはダミー)を使用することがわかります。 _は既知の標準であり、意味のある変数名を使用することをお勧めします。したがって、dummydummy1dummy_anythingを使用できます。これらの変数名を使用することで、PyLintは文句を言いません。

12
Alfred

引数に名前を付ける必要がある場合(たとえば、名前で参照される特定の引数を使用しないモックを作成する場合)、このショートカットメソッドを追加できます。

def UnusedArgument(_):
  pass

そして、このように使用します

def SomeMethod(name_should_remain):
  UnusedArgument(name_should_remain)
1
kateroh

同じ行のforループの後に次のコメントを追加します。

#pylint:disable = unused-variable

for i in range(100): #pylint: disable=unused-variable
1

ジェネレーターオブジェクトは、実際には変数を使用しません。のようなもの

list(('' for x in myList))

トリックを行う必要があります。 xは、ジェネレーター内包の外側の変数として定義されていないことに注意してください。

0
highBandWidth

変数に人間が読める名前を付けたい場合は、_を変数名の先頭に追加することもできます。たとえば、_foo_foo1_anythingを使用でき、PyLintは文句を言いません。 forループでは、次のようになります。

for _something in range(10):
    do_something_else()

編集:例を追加

0
Adam Scharf