rami
Si tengo una lista de comprensión (por ejemplo) como esta:
['' for x in myList]
Efectivamente, haciendo una nueva lista que tiene una cadena vacía para cada elemento en una lista, nunca uso el x
. ¿Hay una forma más limpia de escribir esto para no tener que declarar lo que no se usa? x
¿variable?
kennytm
_
es un nombre de marcador de posición estándar para miembros ignorados en una asignación de tupla y bucle for, por ejemplo
['' for _ in myList]
[a+d for a, _, _, d, _ in fiveTuples]
Por cierto, su lista podría escribirse sin comprensión de lista (suponiendo que desea hacer una lista de miembros inmutables como cadenas, enteros, etc.).
[''] * len(myList)
-
Este último debe ir acompañado de una gran advertencia de que no hace lo esperado para los objetos mutables.
– usuario395760
29 de marzo de 2011 a las 18:29
-
@Mohit:
a=[[]]*4;a[0].append(5);print(a)
– kennytm
29 de marzo de 2011 a las 18:32
-
@Ramy: Mohit publicó una explicación pero fue eliminada :S De todos modos, revisa las Notas 2 en docs.python.org/py3k/library/….
– kennytm
30 de marzo de 2011 a las 6:52
-
@Ramy, Python mantiene la misma referencia para el mismo objeto en la memoria.
–Mohit Ranka
30 de marzo de 2011 a las 9:13
-
@EricAuld no importa, el ciclo for no depende del nombre de la variable (
for i in range(3): for i in range(3): print('.')
siempre imprimirá 9 puntos). La variable interna seguramente sombreará la externa, pero se supone que no debes leer_
.– kennytm
27 de julio de 2018 a las 3:56
No. Como dice el Zen: los casos especiales no son lo suficientemente especiales como para romper las reglas. El caso especial son los bucles que no usan los elementos de la cosa que se está iterando y la regla es que hay un “objetivo” para desempaquetar.
Sin embargo, puede utilizar _
como nombre de variable, que generalmente se entiende como “intencionalmente no utilizado” (incluso PyLint, etc. lo sabe y lo respeta).
-
PyLint sin embargo se queja de que
C: 10,24: Invalid variable name "_" (invalid-name)
a menos que lo añadasgood-names
en tus.pylintrc
.– giorgiosironi
8 de junio de 2016 a las 8:22
Alfredo
Resulta que usando dummy*
(la palabra inicial es ficticia) ya que el nombre de la variable hace el mismo truco que _
. _
es un estándar conocido y sería mejor usar nombres de variables significativos. Entonces puedes usar dummy
, dummy1
, dummy_anything
. Usando estos nombres de variables PyLint
no se quejará
-
De hecho, prefiero este enfoque. sigue siendo significativo.
– RvdK
19 de febrero de 2018 a las 7:45
Agregue el siguiente comentario después del bucle for en la misma línea:
#pylint: disabled=variable no utilizada
for i in range(100): #pylint: disable=unused-variable
Si necesita nombrar sus argumentos (por ejemplo, al escribir simulacros que no usan ciertos argumentos a los que se hace referencia por nombre), puede agregar este método abreviado:
def UnusedArgument(_):
pass
y luego usarlo así
def SomeMethod(name_should_remain):
UnusedArgument(name_should_remain)
ancho de banda alto
Los objetos generadores en realidad no usan las variables. Entonces algo como
list(('' for x in myList))
debería hacer el truco. Tenga en cuenta que x no se define como una variable fuera de la comprensión del generador.
Adán Scharf
También puede anteponer un nombre de variable con _
si prefiere darle a la variable un nombre legible por humanos. Por ejemplo, puedes usar _foo
, _foo1
, _anything
y PyLint no se quejará. En un bucle for, sería como:
for _something in range(10):
do_something_else()
editar: Agregar ejemplo
Inspirándome en esta pregunta, creé un tutorial de YouTube que cubre las variables no utilizadas en las listas de comprensión. youtube.com/watch?v=cZb5aFcpsAs
–Brendan Metcalfe
7 de enero de 2021 a las 3:17
Importante: PEP 640: sintaxis de variables no utilizadas (actualmente en estado de “Borrador”), que propone permitir
?
como marcador de posición.– 0 _
13 de abril de 2021 a las 5:08