paint-brush
Comprender el guión bajo (_) de Pythonpor@mingrammer
459,055 lecturas
459,055 lecturas

Comprender el guión bajo (_) de Python

por mingrammer2017/01/15
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

El <em>guión bajo</em> (_) es especial en Python.

Company Mentioned

Mention Thumbnail
featured image - Comprender el guión bajo (_) de Python
mingrammer HackerNoon profile picture

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.

  1. Para almacenar el valor de la última expresión en el intérprete.
  2. Por ignorar los valores específicos. (llamado "no me importa")
  3. Para dar significados y funciones especiales al nombre de vartiables o funciones.
  4. Para usar como funciones de 'Internacionalización (i18n)' o 'Localización (l10n)'.
  5. Para separar los dígitos del valor literal del número.

Veamos cada caso.

Cuando se usa en intérprete

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

Por ignorar los valores

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()

Dar significados especiales al nombre de variables y funciones.

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

Como funciones de internacionalización (i18n)/localización (l10n)


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.'))

Para separar los dígitos del valor literal del número

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

Conclusión


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!