una - Python: usando 4 espacios para sangría. ¿Por qué?
fijar ejes matplotlib (13)
Creo que la verdadera pregunta es por qué espacios y no pestañas.
Las pestañas son claramente mejores:
- Hace casi imposible tener una indentación inconsistente (he visto código que normalmente tiene 4 espacios para sangrías, pero luego algunas partes están separadas por un espacio, es difícil decir con una simple inspección si hay 7 u 8 espacios ... no ocurriría con las pestañas, a menos que establezca su tabstop en 1 espacio).
- Tab es una representación semántica lógica para la sangría, le permite a usted (y a cualquier otro desarrollador) elegir mostrar tantos "espacios" (o más bien columnas) que desee sin interferir con las preferencias de otras personas.
- También es menos pulsaciones de teclas si tiene solo a mano "bloc de notas" (u otro editor ficticio).
- Agregar y eliminar pestañas es una operación simétrica . La mayoría de los IDE pueden insertar automáticamente 4 espacios al presionar la tecla de tabulación, pero normalmente eliminan solo 1 espacio cuando presionan el retroceso (la operación de anulación de sangrado aún está disponible como shift-tab, pero esa es una combinación de dos teclas) o usted usa el mouse para hacer clic en el medio de la sangría y eliminar un personaje.
- Toman solo 1 byte en lugar de 4 (¡multiplique por miles de líneas y ahorre unos KB!: P)
- Tiene una cosa menos para llegar a un acuerdo, porque si decide buscar espacios, la discusión comienza de nuevo a elegir cuántos (aunque el consenso parece ser de cuatro).
Ventajas de espacios:
- A Guido le gustan.
- No puede escribir fácilmente una pestaña aquí, transfiere el foco (aunque puede pegar uno).
Mientras estoy codificando python estoy usando solo 2 espacios para sangrar, seguro que PEP-8 realmente recomienda tener 4 espacios, pero históricamente para mí es inusual.
Entonces, ¿alguien puede convencerme de usar 4 espacios en lugar de 2? ¿Qué pros y contras?
PS Y finalmente, ¿cuál es la manera más fácil de convertir toda la base de código existente de 2 espacios a 4 espacios?
PPS PEP-8 También recomienda no usar pestañas para la sangría. leer aquí
Entonces, para resumir:
Pros:
- Disponga de más espacio para organizar cuando se enhebra una cuerda de más de 80 líneas de longitud.
- Puede copiar código de fragmentos y simplemente funciona.
Contras:
- Con un nivel más profundo de declaraciones anidadas, tienes menos espacio para el código real.
Gracias.
Cualquier editor decente (emacs, vim) le extraerá todo este sinsentido. Funcionará igual de bien con espacios o pestañas, y se puede configurar para usar cualquier cantidad de espacios (o cualquier cantidad de espacios-ancho para un carácter de tabulación). También puede convertir entre los diferentes formatos sin demasiados problemas (vea el comando :retab
en vim).
Si está tratando de convertir formato de fuente a granel, le recomiendo que eche un vistazo a la utilidad de indent .
Dicho esto, no puedo resistirme a responder la otra pregunta ... Mi preferencia siempre ha sido por las pestañas, ya que elude todo el problema y todos pueden ver el código fuente con los anchos establecidos como mejor les parezca. También es mucho menos tipeo cuando trabajas en editores que no son útiles para convertirlo. En cuanto a 2 vs 4 espacios, eso es puramente cosmético.
El PEP no es tu jefe. Si ya tiene una sangría de 2 espacios consistentemente, no hay razón para cambiar todo su código para cumplirlo. Podrías seguirlo si realmente crees que es tan vital, pero, francamente, no lo hago. Es mejor que vaya con cualquier convención que le proporcione a usted (y a sus compañeros de trabajo) la mayor comodidad tanto en lectura como en escritura.
Es más fácil identificar visualmente bloques de código anidados largos con 4 espacios. Ahorra tiempo cuando se depura.
La identación y los estándares de estilo de codificación varían de un idioma a otro, de un proyecto a otro. Hay una razón para adoptar un estándar de estilo de codificación: para que el código se vea uniforme, sin importar quién lo haya escrito. Eso mejora la legibilidad en el proyecto y, para decirlo sin rodeos, se ve mejor.
Hay una razón que no es válida cuando se adopta un estándar de estilo de codificación: porque te gusta. Los estándares de codificación existen precisamente porque las preferencias de las personas varían, y si se las deja a las suyas, se produciría un caos en detrimento de todos.
Si está escribiendo un código para usted solo, que nadie leerá nunca, adelante y escríbalo como quiera. De lo contrario, seguir el estándar aceptado de su comunidad hará que su código sea mucho más agradable para los ojos de los demás. Y recuerde, también, que si decide contribuir con código a una comunidad en el futuro, le será más fácil si ya está acostumbrado a su estilo de codificación.
En cuanto a cambiar el tamaño de las pestañas, existen muchos formateadores de códigos fuente que admiten Python, y la mayoría de los editores e IDE de los programadores también tienen esta capacidad. Probablemente ya lo tenga, solo es cuestión de consultar la documentación del editor que está utilizando.
Me gusta el hecho de que cuatro caracteres espaciales sangran el código interno de una función, porque def + un espacio tiene cuatro caracteres.
def·foo():
····pass
No hay una sangría "mejor". Es un tema religioso de guerra santa. Cuatro es bueno porque es suficiente para que la sangría sea clara, pero no tanto que toda la pantalla sea en su mayoría en blanco y tenga que desplazarse horizontalmente para leer la mitad del programa.
También tiene el lado positivo de ser una "media pestaña" w / r a la definición histórica de una "pestaña".
Aparte de eso, use lo que le guste a su grupo. Es como chocolate vs. vainilla.
Una forma fácil de cambiar es usar un editor que tenga compatibilidad con pestañas y pestañas espaciales. Convierta todas las pestañas espaciales principales en pestañas, establezca el tamaño de las pestañas en cuatro y luego convierta las pestañas iniciales en pestañas espaciales.
Bastante fácil de hacer con un script de python también. Simplemente cuente todos los espacios iniciales, luego agregue la misma cantidad al principio de la línea y vuelva a escribirla.
Si desea escribir el código python junto con otros programadores, se convierte en un problema si utiliza una indención diferente a ellos. La mayoría de los programadores de Python tienden a usar sangría de 4 espacios.
Si usted es el único programador que trabaja en su archivo fuente y no existen estándares de codificación que impongan un estilo en particular, use lo que sea que le resulte cómodo. Personalmente (y de acuerdo con nuestro estándar de codificación), utilizo pestañas duras para que cualquiera que esté mirando el código pueda usar sus propias preferencias.
Para hacer un cambio, simplemente necesita cambiar todos los espacios de inicio de línea por dos veces más grandes. Hay muchas maneras de hacer esto; en el editor de texto Vim, puedo pensar en dos: en primer lugar:
:%s/^/(/s/{2}/)/+//=repeat('' '', len(submatch(0))*2)
Esta es una expresión regular simple que busca uno o más pares de espacios al comienzo de la línea y los reemplaza con el doble de espacios que se encontraron. Se puede ampliar para hacer todos los archivos abriendo vim con:
vim *.py
(o el equivalente), seguido por (no probado):
:argdo %s/^/(/s/{2}/)/+//=repeat('' '', len(submatch(0))*2)/ | w
Alternativamente:
" Switch to hard tabs:
:set noexpandtab
" Set the tab stop to the current setting
:set tabstop=2
" Change all spaces to tabs based on tabstop
:retab!
" Change the tab stop to the new setting
:set tabstop=4
" Go back to soft tabs
:set expandtab
" Replace all the tabs in the current file to spaces
:retab
Por supuesto, muchas otras herramientas ofrecerán características similares: me sorprendería si algo como sed
, awk
, perl
o python
no pudiera hacer esto muy fácilmente.
También una de las razones es: cuando tienes una línea larga (más de 80 símbolos) y quieres dividirla en 2, tendrás solo 1 espacio para sangrar, eso es un poco confuso:
if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols /
and someotherstatementhere:
# some code inside if block
pass
if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols /
and someotherstatementhere:
# some code inside if block
pass
Todos los demás usan 4 espacios. Esa es la única razón para usar 4 espacios que he encontrado y aceptado. En mi corazón, todavía quiero usar pestañas (caracteres de 1 sangría por sangría, tiene sentido, no, sangría separada de otros espacios en blanco. No me importa que las pestañas se puedan mostrar en anchos diferentes, eso no hace diferencia sintáctica. eso puede ocurrir es que algunos de los comentarios no se alinean. ¡El horror!), pero acepté que, dado que la comunidad de Python en su conjunto usa 4 espacios, utilizo 4 espacios. De esta forma, puedo armar código a partir de fragmentos que otros han escrito, y todo funciona.
Una razón es que si usa menos espacios para la sangría, podrá anidar más declaraciones (ya que la longitud de la línea normalmente está restringida a 80).
Ahora estoy bastante seguro de que algunas personas todavía no están de acuerdo sobre cuántos constructos anidados deberían ser el máximo.
usar 4 espacios o 2 espacios es totalmente de usted. 4 espacios es solo una convención. Lo que es más importante, no mezcle pestañas y espacios. Usa la barra espaciadora