¿Cómo indicar múltiples valores no utilizados en Python?

Normalmente en Python, uno debería usar un _ para indicar que un argumento no está en uso.

 def example_basic(unused): pass 

se convierte en

 def example_basic(_): pass 

Luego, si hay varios argumentos no utilizados, no se pueden usar múltiples _ ya que entrarán en conflicto, por lo que se usa un *_ :

 def example_multiple(unused1, unused2): pass 

se convierte en

 def example_multiple(*_): pass 

Finalmente, ¿qué se debe hacer si hay varios argumentos no adyacentes que no se utilizan?

 def example_non_adjacent(unused1, used, unused2): return used 

El uso de múltiples _ s todavía no funciona, y el uso de *_ no funcionará ya que no son adyacentes.

Tenga en cuenta que preferiría mucho cambiar la API, pero en aras de esta pregunta, supongamos que no es posible. ¿Hay alguna forma de indicar que se ignora sin usar algo como # pylint: disable=unused-argument unused # pylint: disable=unused-argument para PyLint o i-dont-know-what para PyCharm?

EDITAR:

Publiqué un ejemplo donde se necesita esto aquí.

He visto códigos usando el siguiente lenguaje;

 def example_non_adjacent(_0, used, _1, _2, _3, also_used): ... 

lo cual me parece agradable si realmente tienes muchas variables no utilizadas.

Dicho esto, solo porque una variable no esté en uso no significa que el código sea más legible si omite su nombre propio. Esto solo debe hacerse si realmente piensa que ocultar los nombres de las variables mejora la legibilidad y / o la comprensión del código.

Pylint (y lo más probable es que otros lectores de su código) estarán tan contentos si concatena varios guiones bajos. Pylint no se quejará de los argumentos no utilizados si haces esto:

 def example_non_adjacent(_, used, __): return used 

Estoy de acuerdo con algunos comentaristas en que esto es feo y trataría de evitarlo por todos los medios.

Pylint (y la mayoría de los lectores humanos, supongo) tampoco se quejarán si agrega el prefijo cb_ a sus nombres de funciones para transmitir el hecho de que son devoluciones de llamada y tiene que recibir algunos argumentos incluso si no desea usarlos. Esto me parece una solución mejor.

 def cb_example_non_adjacent(unused1, used, unused2): return used 

Solo del ellos. Es muy rápido debido a la forma en que funciona el recolector de basura.

 def test(test): del test print('I do not need test parameter here!') 

Si está pasando parámetros con el método de callback, asígnele un nombre propio y del . No los denote como no utilizados.

Esta es una función de callback de ejemplo:

 def handle(socket, address): del address # del is as efficient as a newline ;-) stream = bytes() while True: chunk = socket.recv() if not chunk: break stream += chunk return stream 

Los pitonistas normalmente no usan _ guión bajo para un argumento si es posible.
Es posible que haya entendido mal el uso del subrayado _ como un nombre para una variable no útil.

Es comprensible utilizar _ para un nombre de variable cuando no sabemos cómo llamarlo y / o no se utilizará:

 # ignore variables when unpacking a tuple def test(): """some code here""" top = 10 right = 10 bottom = 40 left = 10 return top, right, bottom, left # here we ignore right and left top, _, bottom, _ = test() # use top and bottom in your code 

Estoy totalmente de acuerdo con @jmd_dk en este caso. El hecho de que la función no haga referencia o modifique un argumento en realidad, no significa que no se use. Después de todo, debe ser instanciado y pasado explícitamente a la función. El único uso justificado de los guiones bajos para los nombres de variables es cuando se usan for -loops y listas de comprensión:

 numbers = {_ for _ in range(10)} for _ in numbers: print("Foo!") 

Pero el hecho de que necesite una solución como esta significa que hay un problema de diseño en su código.