2009-12-20 30 views
30

Estaba leyendo que Python hace todos sus "bloques de código" por sangría, en lugar de con llaves. ¿Está bien? Entonces, ¿las funciones, las si y cosas así aparecen sin rodear su bloque con llaves?¿Es verdad que no puedo usar llaves en Python?

+7

http://stackoverflow.com/questions/1003841/how-do-i-move-the-turtle-in-logo – Skilldrick

+11

De hecho, Python admite llaves, BEGIN/END y casi cualquier esquema de bloqueo de otro idioma: consulte http: //www.python. org/doc/humor/# python-block-delimited-notation-parsing-explain! –

+32

"No hay pregunta es lo suficientemente nuevo" (cita de SO FAQ). SO es sobre preguntas que pueden ser respondidas. Creo que ambos son verdaderos aquí. Quizás para Pythoneers esta es una pregunta trivial, pero ¿y qué? Otros preguntan "cómo sacar segundos de una marca de tiempo" o "qué es un número hexadecimal" y nadie se queja. – Abel

Respuesta

245
if foo: #{ 
    print "it's true" 
#} 
else: #{ 
    print "it's false!" 
#} 

(Obviamente, esto es una broma.)

+0

Así que es posible. ¡guay! – openfrog

+4

@openfrog: no, no lo es, estos son solo comentarios de código de una sola línea ... (y dijo que era una broma) – Abel

+3

@Abel es correcta. Debería haber explicado la broma en un comentario, por las dudas. –

7

Sí.

if True: 
    #dosomething 
else: 
    #dosomething else 

#continue on with whatever you were doing 

Básicamente, donde sea que haya tenido una llave de apertura, use dos puntos. Unindent para cerrar la región. No toma mucho tiempo para que se sienta completamente natural.

9

Sí :)

Y hay (por lo general) una diferencia entre los 4 espacios y una pestaña, así que asegúrese de estandarizar el uso ..

+5

Altamente recomendado para usar 4 espacios sobre la pestaña también, así que por favor cambie los viejos hábitos si actualmente usa pestañas :) –

+8

De ninguna manera voy a cambiar la pestaña por espacios. Todos los demás códigos que he escrito durante 10 años usan indentación de pestañas sin ningún problema. – Jonny

+6

@Jordan Messina Estoy en desacuerdo, y fuertemente. Para fines de sangría, las pestañas son muy superiores a los espacios. Sé que Python recomienda oficialmente el uso de espacios, pero ojalá no fuera así. – antred

23

Sí. Las llaves no se usan. En su lugar, se utiliza el símbolo : para introducir nuevos bloques, así:

if True: 
    do_something() 
    something_else() 
else: 
    something() 
+2

Entonces, ¿cómo termina un bloque? – Jonny

+1

Es posible que desee volver a escribir los nombres de las funciones para que sean compatibles con PEP 8. Las preguntas de los principiantes deben responderse con los mejores ejemplos. – dnevins

+2

@Jonny: los bloques terminan implícitamente, por un outdent/dedent/unindent, es decir, cuando se reduce el nivel de sangría en uno. No hay un carácter explícito que se use para marcar el final del bloque. Esto significa que a diferencia de C, por ejemplo, no puede tener múltiples bloques en el mismo nivel, ya que crearía ambigüedad. –

29

correcta para los bloques de código. Sin embargo, defina diccionarios en Python con llaves:

a_dict = { 
    'key': 'value', 
} 

Ahhhhhh.

79

Usted puede tratar de añadir soporte para los frenos utilizando un comunicado future import, pero todavía no está soportado, de manera que obtendrá un error de sintaxis:

>>> from __future__ import braces 
    File "<stdin>", line 1 
SyntaxError: not a chance 
+1

y para cualquier persona que se pregunte, esta declaración importante es un huevo de Pascua. La excepción es que los desarrolladores de python dicen "no, nunca lo agreguen" – Sirens

3

Como han mencionado otros, está en lo cierto, no hay llaves en Python. Además, no tiene final o endif o endfor ni nada de eso (como en pascal o ruby). Todos los bloques de código están basados ​​en sangrías.

2

Sí, bloques de código en Python se definen por su sangría. Los creadores de Python estaban muy interesados ​​en el código de auto-documentación. Incluyeron la sangría en la sintaxis como una forma de aplicar innatamente una buena práctica de formato.

Programé en Python durante unos años y me encariñé bastante con la estructura de código porque es realmente más fácil. ¿Alguna vez ha omitido un corsé de cierre en un programa grande y pasó horas tratando de encontrarlo? No es un problema en Python. Cuando dejé ese trabajo y tuve que empezar a usar PHP, realmente me perdí la sintaxis de Python.

+9

"¿Alguna vez ha omitido una llave de cierre en un programa grande y pasó horas tratando de encontrarlo?" No nunca. Pero he tenido herramientas o editores que han estropeado el espacio en blanco en un par de ocasiones y no tenían forma de desambiguar el resultado. – alexh

+1

@alexh ¡Los tiempos realmente han cambiado! De vuelta en el B.C. días (antes de los teléfonos celulares) no siempre teníamos editores de texto capaces de auto-matching o auto-inserción de llaves, parens, etc. Creo que su experiencia muestra que el desarrollo de la característica de detección de espacio en blanco generalmente ha quedado rezagado detrás de la coincidencia de corchetes. Hay editores de texto diseñados específicamente para Python que no arruinan el espacio en blanco. Consejo: asegúrese de tener su editor configurado para identificar espacios y pestañas. –

2

Python with Braces es una variante de python que le permite hacer exactamente eso. Es un proyecto en el que he estado trabajando últimamente junto con mi amigo.

4

Python no utiliza llaves para bloques de código:

>>> while True { 
    File "<stdin>", line 1 
    while True { 
      ^
SyntaxError: invalid syntax 

>>> from __future__ import braces 
    File "<stdin>", line 1 
SyntaxError: not a chance 

(Nótese el "no una oportunidad" mensaje - esto es un huevo de Pascua que refleja esta decisión de diseño.)

Como un lenguaje diseñado para ser fácil de usar y leer, Python usa dos puntos y una sangría para designar bloques de código. La definición de bloques de código por indentación es inusual y puede sorprender a los programadores que están acostumbrados a lenguajes como C++ y C# porque a estos (y muchos otros idiomas) no les importan los espacios en blanco o las sangrías adicionales. Esta regla pretende aumentar la legibilidad del código de Python, a costa de la libertad del programador de usar cantidades variables de espacios en blanco.

Un aumento en el nivel de sangría indica el inicio de un bloque de código, mientras que una disminución indica el final del bloque de código. Por convención, cada sangría tiene cuatro espacios de ancho.

Aquí hay un ejemplo simple que resume todos los números enteros de 0 a 9. Nota que oscila en Python incluye el primer valor, hasta, pero no incluyendo el último valor:

j = 0 
for i in range(0, 10): 
    j += i 
print(j) 
+0

Otra joya encantadora en pitón –

Cuestiones relacionadas