¿Cuál es el significado de _
después for
en este código?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
¿Cuál es el significado de _
después for
en este código?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
_
tiene 4 usos convencionales principales en Python:
raise forms.ValidationError(_("Please enter a correct username"))
label, has_label, _ = text.partition(':')
.def
o lambda
), cuando se fije la firma (por ejemplo, por una devolución de llamada o la API de la clase padre), pero esta implementación función particular no necesita todos los parámetros, como en el código como:callback = lambda _: True
(Durante mucho tiempo, esta respuesta solo enumeró los primeros tres casos de uso, pero el cuarto caso surgió con suficiente frecuencia, como se señala aquí , para que valga la pena enumerarlo explícitamente)
Los últimos casos de uso de "variable desechable o nombre de parámetro" pueden entrar en conflicto con el caso de uso de búsqueda de traducción, por lo que es necesario evitar usarlo _
como variable desechable en cualquier bloque de código que también lo use para la traducción i18n (muchas personas prefieren un doble guión bajo) , __
como su variable desechable exactamente por este motivo).
_
es el nombre utilizado para la función que realiza búsquedas de traducción de cadenas de internacionalización y localización. Estoy bastante seguro de que es la gettext
biblioteca C la que estableció esa convención.
__
(un doble guión bajo) como mi variable de uso general para evitar conflictos con cualquiera de los dos primeros casos de uso.
_
usar como nombre de variable desde que comencé a usar Python profesionalmente en 2002.
a, __, c = iterable
le dice al lector de inmediato que estamos desempacando una tupla de 3, pero solo usando los valores primero y último. Si en lugar de escribir a, b, c = iterable
, el lector (o un código de linter automatizado) pueden esperar razonablemente que todos a
, b
y c
para ser utilizado más adelante (y si no lo son, puede ser un signo de un fallo en algún lugar).
Es solo un nombre de variable, y es convencional en Python para usar _
con variables desechables. Simplemente indica que la variable de bucle no se usa realmente.
_
, deja de mantener permanentemente el valor de salida de la expresión anterior. Esto parece terriblemente inconsistente, y los estándares de Python Lang deben abordar esto. Deben definir _
como un nombre desechable y evitar que se use como un identificador real.
El subrayado _
se considera como variable " No me importa " o " Desechable " en Python
El intérprete de python almacena el último valor de expresión en la variable especial llamada _
.
>>> 10
10
>>> _
10
>>> _ * 3
30
El guión bajo _
también se usa para ignorar los valores específicos. Si no necesita los valores específicos o los valores no se utilizan, simplemente asigne los valores para subrayar.
Ignorar un valor al desempacar
x, _, y = (1, 2, 3)
>>> x
1
>>> y
3
Ignorar el índice
for _ in range(10):
do_something()
_("Hello world!")
.
dis
módulo, descubrí que no había diferencia en el código de bytes . Sin embargo, los beneficios de la legibilidad humana son obvios.
Hay 5 casos para usar el guión bajo en Python.
Para almacenar el valor de la última expresión en el intérprete.
Para ignorar los valores específicos. (llamado "no me importa")
Dar significados y funciones especiales al nombre de vartiables o funciones.
Para usar como funciones de 'Internacionalización (i18n)' o 'Localización (l10n)'.
Para separar los dígitos del valor literal del número.
Aquí hay un buen artículo con ejemplos de mingrammer .
En lo que respecta a los lenguajes Python, _
no tiene un significado especial. Es un identificador válido como _foo
, foo_
o _f_o_o_
.
Cualquier significado especial de _
es puramente por convención. Varios casos son comunes:
Un nombre ficticio cuando una variable no está destinada a ser utilizada, pero la sintaxis / semántica requiere un nombre.
# iteration disregarding content
sum(1 for _ in some_iterable)
# unpacking disregarding specific elements
head, *_ = values
# function disregarding its argument
def callback(_): return True
Muchos REPL / shells almacenan el resultado de la última expresión de nivel superior en builtins._
.
El identificador especial
_
se usa en el intérprete interactivo para almacenar el resultado de la última evaluación; Se almacena en elbuiltins
módulo. Cuando no está en modo interactivo,_
no tiene un significado especial y no está definido. [ fuente ]
Debido a la forma en que se buscan los nombres, a menos que estén sombreados por una _
definición global o local a la que se _
hace referencia builtins._
.
>>> 42
42
>>> f'the last answer is {_}'
'the last answer is 42'
>>> _
'the last answer is 42'
>>> _ = 4 # shadow ``builtins._`` with global ``_``
>>> 23
23
>>> _
4
Nota: Algunos shells como ipython
no se asignan a builtins._
casos especiales _
.
En el contexto de internacionalización y localización, _
se utiliza como un alias para la función de traducción primaria.
Devuelve la traducción localizada del mensaje, en función del dominio global actual, el idioma y el directorio local. Esta función generalmente tiene un alias como _ () en el espacio de nombres local (ver ejemplos a continuación).
len(tbh.bag.atom_set())
(si el valor devuelto tiene un__len__
método) osum(1 for _ in tbh.bag.atom_set())
pylint
otra opción para nombres de variable ficticios hay un prefijodummy_
para el nombre de la variable. Al usar este prefijo conpylint
,pylint
no se emite una advertencia. También puede configurar el patrón variable ficticio parapylint
acomodar cosas como__
.