Как я могу обойти объявление неиспользуемой переменной в цикле for?
Если у меня есть понимание списка (например), например:
['' for x in myList]
Эффективно создавая новый список с пустой строкой для каждого элемента в списке, я никогда не использую x
. Есть ли более чистый способ написать это, поэтому мне не нужно объявлять неиспользованную переменную x
?
Ответы
Ответ 1
_
- это стандартное имя-заполнитель для игнорируемых элементов в назначении for-loop и tuple, например
['' for _ in myList]
[a+d for a, _, _, d, _ in fiveTuples]
Кстати, ваш список может быть написан без понимания списка (предполагая, что вы хотите составить список неизменяемых членов, таких как строки, целые числа и т.д.).
[''] * len(myList)
Ответ 2
Нет. Как говорит Дзэн: Особые случаи не являются достаточно сложными, чтобы нарушать правила. Особым случаем являются циклы, не использующие элементы повторяющейся вещи, и правило состоит в том, что существует "цель" для распаковки.
Однако вы можете использовать _
как имя переменной, которое обычно понимается как "намеренно неиспользуемое" (даже PyLint и т.д. знает и уважает это).
Ответ 3
Оказывается, использование dummy*
(стартовое слово является фиктивным), поскольку имя переменной делает тот же трюк, что и _
. _
является известным стандартом, и было бы лучше использовать значащие имена переменных. Таким образом, вы можете использовать dummy
, dummy1
, dummy_anything
. При использовании этих имен переменных PyLint
не будет жаловаться.
Ответ 4
Если вам нужно указать ваши аргументы (в случае, например, при написании mocks, которые не используют определенные аргументы, на которые ссылается имя), вы можете добавить этот метод ярлыков:
def UnusedArgument(_):
pass
а затем используйте его так:
def SomeMethod(name_should_remain):
UnusedArgument(name_should_remain)
Ответ 5
Объекты-генераторы фактически не используют переменные. Так что что-то вроде
list(('' for x in myList))
должен сделать трюк. Обратите внимание, что x не определяется как переменная вне понимания генератора.
Ответ 6
Вы также можете добавить к имени переменной _
если вы предпочитаете дать переменной понятное человеку имя. Например, вы можете использовать _foo
, _foo1
, _anything
и PyLint не будет жаловаться. В цикле for это будет выглядеть так:
for _something in range(10):
do_something_else()
редактировать: добавить пример
Ответ 7
Добавьте следующий комментарий после цикла for в той же строке:
pylint: disable = unused-variable
for i in range(100): #pylint: disable=unused-variable
Ответ 8
Комментарий Как я могу обойти объявление неиспользуемой переменной в цикле for? (Ran out of comment size)
Python поддерживает ту же ссылку для созданного объекта. (независимо от изменчивости), например,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Вы можете видеть как i, так и j, ссылаться на один и тот же объект в памяти. Что происходит, когда мы меняем значение одной неизменяемой переменной.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
вы можете видеть, j теперь начинает указывать новое местоположение (где 2 хранится), и я все же указываю на место, где хранится 1.
Оценивая,
j = j+1
Значение выбирается из 142671248, вычисляется (если оно еще не кэшировано) и помещается в новое место 142671236. j делается для указания на
новое место. Проще говоря, новая копия, сделанная каждый раз, когда изменяется неизменяемая переменная.
Изменчивость
В этом отношении взаимозаменяемые объекты мало чем отличаются друг от друга. Когда значение указано
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Оба а и b указывают на одну и ту же ячейку памяти.
In [20]: a.append(5)
Изменено расположение памяти, на которое указывает a.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
Оба а и b по-прежнему указывают на одно и то же место памяти. Другими словами, изменяемые переменные действуют в том же месте памяти, на которое указывает переменная, вместо того, чтобы копировать значение, указанное переменной, как в неизменяемом случае переменной.