tiene tabulador tabulacion significa que programacion lenguaje espacios espacio cuantos python tabs indentation spaces

tabulador - Interpretación de Python de tabulaciones y espacios para sangrar.



tabulador lenguaje c (7)

Decidí, que aprendo un poco de Python. La primera introducción dice que usa sangría para agrupar declaraciones. Si bien el mejor hábito es claramente usar solo uno de estos, ¿qué sucede si los intercambio? ¿Cuántos espacios serán considerados iguales a una pestaña? ¿O no funcionará en absoluto si las pestañas y los espacios se mezclan?


Creo que el carácter de la pestaña simplemente nunca debe aparecer en el código fuente bajo ninguna circunstancia. No tiene ninguna ventaja y es una fuente infinita de pequeños errores. - use una cadena de caracteres con / t si necesita una pestaña, tiene la ventaja de que se autodocumenta.

Here está el clásico artículo sobre tabs vs espacios: uso una variante de elw de jwz en mi propio archivo .emacs.

(Confieso que rompí personalmente con PEP 8 utilizando solo la sangría de 2 caracteres: 4 caracteres es mucho cuando sus líneas son solo 80 caracteres ...)


Cuatro espacios son una pestaña (en mi configuración), pero hasta donde sé, no están intercambiados. Puedes usar espacios o pestañas, no ambos.


En Python 2, la interpretación de TAB es como si se convirtiera en espacios usando tabulaciones de 8 espacios (como ya se proporcionó en las respuestas anteriores); es decir, que cada TAB promueve la sangría de 1 a 8 espacios, de modo que la sangría resultante es divisible entre 8.

Sin embargo, esto ya no se aplica a Python 3: en Python 3, la mezcla de espacios y tabulaciones es siempre un error : las pestañas solo coinciden con las pestañas y los espacios solo coinciden con otros espacios en sangría; es decir, una línea sangrada con TAB SPACE SPACE puede contener también líneas sangradas con SPACE SPACE TAB ; y podría contener un bloque con sangría con TAB SPACE SPACE TAB , pero si el bloque con sangría contenía TAB TAB , se consideraría un error de sangría, aunque el bloque aparentemente se extendería aún más:

La sangría se rechaza por inconsistente si un archivo de origen mezcla las pestañas y los espacios de una manera que hace que el significado dependa del valor de una pestaña en los espacios; un TabError se plantea en ese caso.

Es decir, el algoritmo funciona de la siguiente manera:

  • Si tanto el número de pestañas como el número de espacios coinciden con la línea anterior (sin importar el orden), entonces esta línea pertenece al mismo bloque con la línea anterior

  • si el número de uno de (tabulaciones, espacios) es mayor que en la línea anterior y el número de la otra es al menos igual al de la línea anterior, este es un bloque con sangría

  • la tupla (tabs, spaces) coincide con una sangría de un bloque anterior - esto se deduce a ese bloque

  • de lo contrario, se TabError un TabError IndentationError o un TabError .

Esta es la razón por la que la combinación de tabulaciones y espacios, o incluso el uso de tabulaciones para la sangría en absoluto, se consideraría una muy mala práctica en Python.


Le recomendaría que vaya a PEP8 que es la guía de estilo de Python ''oficial'' para el código Python. Cubre (entre otras cosas) el uso de tabulaciones / espacios.


Los espacios no son tratados como equivalentes a la pestaña. Una línea sangrada con una pestaña está en una sangría diferente de una línea sangrada con 1, 2, 4 u 8 espacios.

Prueba por contra-ejemplo ( erróneo, o, en el mejor de los casos, limitado - tab! = 4 espacios ):

x = 1 if x == 1: ^Iprint "fff/n" print "yyy/n"

El '' ^I '' muestra un TAB . Cuando se ejecuta a través de Python 2.5, me sale el error:

File "xx.py", line 4 print "yyy/n" ^ IndentationError: unindent does not match any outer indentation level

De este modo, se muestra que en Python 2.5, las pestañas no son iguales a los espacios (y en particular no son iguales a 4 espacios).

Vaya, vergonzoso; mi prueba por contra-ejemplo muestra que las pestañas no son equivalentes a 4 espacios. Como señala Alex Martelli en un comment , en Python 2, las pestañas son equivalentes a 8 espacios, y adaptar el ejemplo con una pestaña y 8 espacios muestra que este es realmente el caso.

x = 1 if x != 1: ^Iprint "x is not 1/n" print "y is unset/n"

En Python 2, este código funciona, imprimiendo nada.

En Python 3, las reglas son ligeramente diferentes (según lo noted por Antti Haapala ). Comparar:

Python 2 dice:

Primero, las pestañas se reemplazan (de izquierda a derecha) por uno a ocho espacios, de modo que el número total de caracteres hasta e incluyendo el reemplazo es un múltiplo de ocho (se pretende que sea la misma regla que usa Unix). El número total de espacios que preceden al primer carácter que no está en blanco determina la sangría de la línea. La sangría no se puede dividir en varias líneas físicas con barras invertidas; el espacio en blanco hasta la primera barra invertida determina la sangría.

Python 3 dice:

Las pestañas se reemplazan (de izquierda a derecha) por uno a ocho espacios, de modo que el número total de caracteres hasta e incluyendo el reemplazo es un múltiplo de ocho (se pretende que sea la misma regla que usa Unix). El número total de espacios que preceden al primer carácter que no está en blanco determina la sangría de la línea. La sangría no se puede dividir en varias líneas físicas con barras invertidas; el espacio en blanco hasta la primera barra invertida determina la sangría.

(Aparte de la palabra inicial "Primero", estos son idénticos).

Python 3 agrega un párrafo extra:

La sangría se rechaza por inconsistente si un archivo de origen mezcla las pestañas y los espacios de una manera que hace que el significado dependa del valor de una pestaña en los espacios; un TabError se plantea en ese caso.

Esto significa que el ejemplo de TAB frente a 8 espacios que funcionó en Python 2 generaría un TabError en Python 3. Es mejor - necesario en Python 3 - para asegurar que la secuencia de caracteres que forman la sangría en cada línea en un bloque sea idéntico. PEP8 dice ''usa 4 espacios por nivel de sangría''. (Los estándares de codificación de Google dicen ''usa 2 espacios'').


Siga PEP8 para el estilo de Python. PEP 8 dice: Sangría

Usa 4 espacios por nivel de sangría.

Para el código realmente antiguo que no desea desordenar, puede seguir utilizando las pestañas de 8 espacios.

¿Pestañas o espacios?

Nunca mezclar tabulaciones y espacios.

La forma más popular de sangrar Python es solo con espacios. La segunda forma más popular es solo con pestañas. El código sangrado con una mezcla de tabulaciones y espacios se debe convertir para usar espacios exclusivamente. Cuando se invoca al intérprete de línea de comandos de Python con la opción -t, emite advertencias sobre el código que mezcla ilegalmente tabulaciones y espacios. Al usar -tt estas advertencias se convierten en errores. Estas opciones son muy recomendables!


Simplemente no los intercambies :)
Configure su IDE / editor para que ingrese 4 espacios al presionar "tab" y estará listo.