No soy un hablante nativo. Lo siento por mi ingles. Por favor entiende.
El guión bajo (_) es especial en Python.
Si bien el guión bajo (_) se usa solo para funciones y variables de mayúsculas y minúsculas en la mayoría de los idiomas (por supuesto, no para todos), tiene significados especiales en Python. Si usted es un programador de Python, for _ in range(10)
, __init__(self)
como la sintaxis puede ser familiar.
Esta publicación explicará cuándo y cómo usar el guión bajo (_) y lo ayudará a comprenderlo.
Hay 5 casos para usar el guión bajo en Python.
Veamos cada caso.
El intérprete de python almacena el último valor de expresión en la variable especial llamada '_'. Esta función se usó primero en el intérprete estándar de CPython y también podría usarla en otros intérpretes de Python.
>>> 1010>>> _10>>> _ * 330>>> _ * 20600
El guión bajo también se utiliza para ignorar los valores específicos. Si no necesita los valores específicos o los valores no se usan, simplemente asigne los valores al guión bajo .
_# Ignorar un valor al desempaquetar_x, _, y = (1, 2, 3) # x = 1, y = 3
# Ignora los valores múltiples. Se llama "Desempaquetado extendido" y está disponible solo en Python 3.x x, *_, y = (1, 2, 3, 4, 5) # x = 1, y = 5
_# Ignorar el index_for _ en el rango (10): hacer_algo()
# Ignorar un valor de ubicación específica para _, val en list_of_tuple:do_something()
El guión bajo puede ser más utilizado en 'nombrar'. El PEP8, que es la pauta de la convención de Python, presenta los siguientes 4 casos de nomenclatura.
**_single_leading_underscore**Esta convención se usa para declarar variables privadas , funciones, métodos y clases en un módulo. Cualquier cosa con esta convención se ignora en from module import *
. Sin embargo, por supuesto, Python no admite verdaderamente privado, por lo que no podemos forzar algo privado y también podemos llamarlo directamente desde otros módulos. Entonces, a veces lo decimos "indicador de uso interno débil".
_internal_name = 'one_nodule' # variable privada_internal_version = '1.0' # variable privada
clase _Base: # privada class_hidden_factor = 2 # variable privada
def \_\_init\_\_(self, price): self.\_price = price def \_double\_price(self): # private method return self.\_price \* self.\_hidden\_factor def get\_double\_price(self): return self.\_double\_price()
**single_trailing_underscore_**Esta convención podría usarse para evitar conflictos con las palabras clave o las funciones integradas de Python. Es posible que no lo use a menudo.
Tkinter.Toplevel(master, class_='ClassName') # Evitar conflictos con la palabra clave 'clase'
list_ = List.objects.get(1) # Evitar conflictos con el tipo incorporado 'list'
**__double_leading_underscore**Esto se trata de sintaxis en lugar de una convención. El doble guión bajo alterará los nombres de atributos de una clase para evitar conflictos de nombres de atributos entre clases. (llamado "mangling" que significa que el compilador o el intérprete modifican las variables o los nombres de las funciones con algunas reglas, no se usan como están) La regla de mangling de Python es agregar "_ClassName" al frente de los nombres de los atributos que se declaran con doble guion bajo. Es decir, si escribe un método llamado "__método" en una clase, el nombre se alterará en forma de "_ClassName__method".
clase A:def _single_method(self):aprobado
def \_\_double\_method(self): # for mangling pass
clase B(A):def __double_method(self): # for manglingpass
Debido a que los atributos nombrados con guiones bajos dobles se alterarán como arriba, no podemos acceder a ellos con "ClassName.__method". A veces, algunas personas lo usan como si fueran privados reales usando estas funciones, pero no es para uso privado y no se recomienda para eso. Para obtener más detalles, lea Python Naming .
**__doble_guión_subrayado_principal_y_posterior__**Esta convención se usa para variables o métodos especiales (llamados "métodos mágicos") como __init__
, __len__
. Estos métodos proporcionan características sintácticas especiales o hacen cosas especiales. Por ejemplo, __file__
indica la ubicación del archivo Python, __eq__
se ejecuta cuando se ejecuta a == b
. Por supuesto, un usuario puede crear un método especial personalizado, es un caso muy raro, pero a menudo puede modificar algunos métodos especiales incorporados. (por ejemplo, debe inicializar la clase con __init__
que se ejecutará al principio cuando se cree una instancia de clase).
class A:def __init__(self, a): # usar el método especial '__init__' para inicializarse.a = a
def \_\_custom\_\_(self): # custom special method. you might almost do not use it pass
Es solo una convención, no tiene ninguna función sintáctica. Es decir, el guión bajo no significa i18n/l10n , y es solo una convención que une i18n/l10n a la variable de guión bajo que ha sido de la convención C. La biblioteca incorporada gettext
que es para i18n/l10n usa esta convención, y Django, que es el marco web de Python compatible con i18n/l10n , también presenta y utiliza esta convención.
# ver documentos oficiales: https://docs.python.org/3/library/gettext.html import gettext
gettext.bindtextdomain('miaplicación','/ruta/a/mi/idioma/directorio')gettext.textdomain('miaplicación')_ = gettext.gettext
#...
print(_('This is a translatable string.'))
Esta función se agregó en Python 3.6. Se utiliza para separar dígitos de números utilizando guiones bajos para facilitar la lectura.
dec_base = 1_000_000bin_base = 0b_1111_0000hex_base = 0x_1234_abcd
imprimir (base_dec) # 1000000 imprimir (base_bin) # 240 imprimir (base_hex) # 305441741
Hasta ahora hemos cubierto el guión bajo de Python. Si bien soy un programador de Python, no conocía a algunos de ellos hasta que escribí esta publicación. Especialmente, el i18n/l10n es muy nuevo para mí. Al igual que yo, espero que obtenga algunos conocimientos útiles sobre el guión bajo de esta publicación.
A continuación, cubriré cosas más interesantes sobre Python. Gracias.
_Actualizar_ Se agregó la nueva característica (PEP 515) en Python 3.6
Hacker Noon es como los hackers empiezan sus tardes. Somos parte de la familia @AMI . Ahora estamos aceptando presentaciones y estamos felices de discutir oportunidades de publicidad y patrocinio .
Para obtener más información, lea nuestra página de información , envíenos un mensaje/me gusta en Facebook o simplemente envíe un tweet/DM a @HackerNoon.
Si disfrutó de esta historia, le recomendamos que lea nuestras historias sobre tecnología más recientes y las historias sobre tecnología de moda. Hasta la próxima, ¡no des por sentadas las realidades del mundo!