Python subraya como parámetro de función

Tengo una pregunta específica de python. ¿Qué significa un solo guión bajo _ como parámetro? Tengo una función que llama hexdump(_) . El _ nunca se definió, así que supongo que tiene un valor especial, no pude encontrar una referencia que me diga qué significa en la red. Sería feliz si me pudieras decir.

En los shells de Python, el guión bajo ( _ ) significa el resultado de la última expresión evaluada en el shell:

 >>> 2+3 5 >>> _ 5 

También hay _2 , _3 y así sucesivamente en IPython, pero no en el intérprete de Python original. No tengo un significado especial en el código fuente de Python, por lo que sé, por lo que supongo que está definido en algún lugar de su código si se ejecuta sin errores.

No tiene un valor especial en el código que escribes. Almacena el resultado de la última expresión que evaluó en su intérprete interactivo y se usa para su comodidad

Por lo que he podido averiguar, parece que este es el caso:

_ se utiliza para indicar que la variable de entrada es una variable / parámetro desechable y, por lo tanto, puede ser necesaria o esperada, pero no se utilizará en el código que la sigue.

Por ejemplo:

 # Ignore a value of specific location/index for _ in rang(10) print "Test" # Ignore a value when unpacking a,b,_,_ = my_method(var1) 

(Crédito a esta publicación )

El ejemplo específico que encontré fue este:

  def f(_): x = random() * 2 - 1 y = random() * 2 - 1 return 1 if x ** 2 + y ** 2 < 1 else 0 

el guión bajo se considera una variable de “no importa”, además, los IDEs como PyCharm no darán una advertencia si no se utiliza

así que en una función

 def q(a, b, _, c): pass 

el IDE subrayará a, byc (parámetro no utilizado) pero no el subrayado

¿Por qué lo usarías y no omitirías el parámetro?

-> cuando hereda de alguna clase y desea anular una función en la que no quiere usar algún parámetro

otro uso común es indicar que no desea utilizar una parte de una tupla cuando realiza una iteración (u otro desempaquetado), lo que reduce el desorden

 names_and_food = [('michael', 'fruit'), ('eva', 'vegetables')] for name, _ in names_and_food: print(name) 

No puedo encontrarlo en ningún PEP de python, pero pylint lo tiene incluso en las preguntas frecuentes

Sí, tiene un significado en su código, como muestra este ejemplo:

 >>> def f(x): return (x, x + 2) >>> (i, j) = f(5) >>> i 5 >>> j 7 >>> (k, _) = f(7) >>> k 7 

Como puede ver, esto le permite no dar un nombre a un valor devuelto . Pero su caso es diferente, ya que ‘_’ se usa como parámetro (el shell de python estándar lo espera como variable: NameError: name '_' is not defined ).