Se eu tiver uma compreensão de lista (por exemplo) como esta:
['' for x in myList]
Fazendo efetivamente uma nova lista que tem uma string vazia para cada elemento em uma lista, nunca uso o x
. Existe uma maneira mais limpa de escrever isso para que eu não precise declarar a x
variável não utilizada ?
a=[[]]*4;a[0].append(5);print(a)
for
loops aninhados , por exemplo? Ou se dentrofor _ in range(...)
eu quero dizer_, var = f(x)
? Ficará confuso entre as duas_
variáveis?Não. Como diz o Zen: casos especiais não são especiais o suficiente para quebrar as regras. O caso especial é que os loops não usam os itens da coisa que está sendo iterada e a regra é que há um "destino" para o qual descompactar.
Você pode, no entanto, usar
_
como nome de variável, que geralmente é entendido como "intencionalmente não usado" (até mesmo PyLint etc. sabe e respeita isso).fonte
C: 10,24: Invalid variable name "_" (invalid-name)
menos que você o adicione aogood-names
seu.pylintrc
.Acontece que usar
dummy*
(a palavra inicial é fictícia) como o nome da variável faz o mesmo que_
._
é um padrão conhecido e seria melhor usar nomes de variáveis significativos. Assim você pode usardummy
,dummy1
,dummy_anything
. Usar esses nomes de variáveisPyLint
não reclamará.fonte
Adicione o seguinte comentário após o loop for na mesma linha:
#pylint: disable = unused-variable
for i in range(100): #pylint: disable=unused-variable
fonte
Se você precisar nomear seus argumentos (no caso, por exemplo, ao escrever simulações que não usam certos argumentos que são referenciados por nome), você pode adicionar este método de atalho:
def UnusedArgument(_): pass
e então usá-lo assim
def SomeMethod(name_should_remain): UnusedArgument(name_should_remain)
fonte
Os objetos geradores não usam realmente as variáveis. Então algo como
list(('' for x in myList))
deve fazer o truque. Observe que x não é definido como uma variável fora da compreensão do gerador.
fonte
Você também pode acrescentar um nome de variável com
_
se preferir dar à variável um nome legível por humanos. Por exemplo, você pode usar_foo
,_foo1
,_anything
e pylint não vai reclamar. Em um loop for, seria como:for _something in range(10): do_something_else()
editar: Adicionar exemplo
fonte
Uma forma detalhada é:
newList = [] while len(newList) < len(mylist): newList.append('')
Você evita declarar uma variável usada desta forma.
Além disso, você pode anexar objetos mutáveis e imutáveis (como dicionários) em
newList
.Outra coisa para iniciantes em python como eu, '_', 'dummy' são um pouco desconcertantes.
fonte
Experimente, é simples:
# Use '_' instead of the variable for _ in range(any_number): do_somthing()
fonte
Comentário a Como posso evitar declarar uma variável não utilizada em um loop for? (O tamanho do comentário acabou)
Python mantém a mesma referência para o objeto criado. (independentemente da mutabilidade), por exemplo,
In [1]: i = 1 In [2]: j = 1 In [3]: id(i) Out[3]: 142671248 In [4]: id(j) Out[4]: 142671248
Você, pode ver tanto i como j, referem-se ao mesmo objeto na memória. O que acontece, quando mudamos o valor de uma variável imutável.
In [5]: j = j+1 In [6]: id(i) Out[6]: 142671248 In [7]: id(j) Out[7]: 142671236
você pode ver que j agora começa a apontar um novo local, (onde 2 está armazenado) e i ainda aponta para o local onde 1 está armazenado. Durante a avaliação,
j = j+1
O valor é escolhido de 142671248, calculado (se ainda não estiver em cache) e colocado em um novo local 142671236. j é feito para apontar para o novo local. Em termos mais simples, uma nova cópia feita toda vez que uma variável imutável é modificada.
Mutabilidade
Objetos mutáveis agem um pouco diferente a esse respeito. Quando o valor apontado por
In [16]: a = [] In [17]: b = a In [18]: id(a) Out[18]: 3071546412L In [19]: id(b) Out[19]: 3071546412L
Tanto a quanto b apontam para o mesmo local de memória.
In [20]: a.append(5)
A localização da memória apontada por um é modificada.
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
Ambos, aeb, ainda apontam para o mesmo local de memória. Em outras palavras, variáveis mutáveis atuam na mesma localização da memória apontada pela variável, ao invés de fazer uma cópia do valor apontado pela variável, como no caso de variável imutável.
fonte