https://manuais.iessanclemente.net/index.php?title=Python_-_Estructura_l%C3%A9xica_de_Python&feed=atom&action=historyPython - Estructura léxica de Python - Historial de revisiones2024-03-29T14:34:50ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Python_-_Estructura_l%C3%A9xica_de_Python&diff=68691&oldid=prevVieites: /* Líneas y sangrías */2020-11-11T00:38:55Z<p><span dir="auto"><span class="autocomment">Líneas y sangrías</span></span></p>
<p><b>Página nueva</b></p><div>'''Estructura léxica de Python'''<br />
: La "extructura léxica" de un lenguaje de programación es el conjunto de reglas básicas que gobiernan el modo de escribir programas en ese lenguaje. Especifica detalles como el modo de definir variables, qué caracteres utilizar para indicar comentarios, cómo organizar los programas, etc.<br />
: Python es muy particular en lo que se refiere al diseño de los programas, especialmene en lo que respecta a las líneas y al sangrado.<br />
== Líneas y sangrías ==<br />
Para escribir código en Python deberíamos seguir la guía de estilo definida por la propia Comunidad Python. Esta se trata en el [https://www.python.org/dev/peps/pep-0008/ PEP 8] y [https://alexanderae.com/pep8-guia-de-estilo-para-python.html aquí podemos ver un resumen] donde, a continuación, enumeramos algunas de las normas que debemos tener más en cuenta:<br />
* Un programa de Python se compone de un conjunto de líneas lógicas, cada una formada por una o más líneas físicas.<br />
: Si en una línea aparece el símbolo ''#'' indica que todo lo que aparece a su derecha es un "comentario".<br />
: Las líneas en blanco también son ignoradas por el intérprete de Python.<br />
:: '''¡Ojo!:''' En una sesión interactiva, si pulsamos '''''Enter''''' sin escribir nada, ni siquiera un espacio en blanco, se termina una declaración de varias líneas.<br />
* En Python NO es necesario añadir un delimitador para indicar el final de una línea (en otros lenguajes se utiliza el símbolo ''';''').<br />
* Cuando una sentencia es demasiado larga como para escribirse en una única línea (se recomienda que no sean mayores de 80 caracteres), se puede indicar que se sigue en la siguiente añadiendo el símbolo '''\''' al final de la línea aún no terminada. Así y todo, : Python automáticamente une líneas físicamente adyacentes en una única línea lógica si se abre un paréntesis ('''('''), un corchete ('''[''') o una llave ('''{''') hasta que estos sean cerrados.<br />
* Python emplea el sangrado (''indentation'') para expresar un bloque de un programa.<br />
: Al contrario que otros lenguajes, Python no emplea paréntesis, ni corchetes, ni llaves para delimitar los bloques.<br />
: Todas las líneas físicas de un bloque deben tener la misma sangrado.<br />
: La primera línea de un archivo Python no debe tener ningún tipo de sangrado.<br />
* El estilo estándar de Python pide utilizar cuatro espacios para cada nivel de sangrado.<br />
: Nunca se deben utilizar tabuladores (''tab'').<br />
: Se recomienda utilizar un editor para que convierta los tabuladores en espacios (por ejemplo Pycharm).<br />
<br />
== Conjunto de caracteres ==<br />
* Normalmente, los archivos de Python deben estar escritos totalmente con caracteres ASCII (códigos ASCII del 0 al 127).<br />
: Podemos utilizar otros caracteres, pero sólo para comentarios ''strings'' (texto), siempre y cuando comencemos nuestro archivo Python con la siguiente línea:<br />
<source lang="python"><br />
# -*- coding: utf-8 -*-<br />
</source><br />
<br />
== Tokens ==<br />
* Se denominan ''tokens'' a los componentes léxicos del lenguaje de programación.<br />
: Los tipos de ''token'' son: identificadores, palabras clave, operadores, delimitadores y literales.<br />
: Para separar los ''tokens'' se utilizan espacios.<br />
<br />
== Identificadores ==<br />
* Un ''identificador'' es el nombre empleado para identificar una variable, una función, una clase, un módulo u otro objeto.<br />
: Un identificador comienza con una letra (de la A a la Z o de la a a la z) o con un guión bajo (_) seguido de cero o más letras, guiones bajos y números.<br />
: Python distingue mayúsculas de minúsculas.<br />
: '''Python NO permite''' signos de puntuación como @, $ y %, excepto el guión bajo (_).<br />
* Se recomienda nombrar las clases comenzando por una letra mayúscula y el resto de los identificadores por una letra minúscula.<br />
: Si un identificador comienza por un guión bajo, significa que es "privado".<br />
<source lang="python"><br />
# Identificadores validos: <br />
radio<br />
RaDio<br />
contAlumnos<br />
Cont_Alumnos<br />
num1<br />
<br />
# Identificadores NO validos:<br />
2E2<br />
Miércoles<br />
Cont-Alumnos<br />
Conjunto Primero<br />
print #palabras reservadas<br />
1_cantidad<br />
</source><br />
: Recuerda que Python distingue las mayúsculas de las minúsculas, entonces por ejemplo '''area''', '''Area''', '''AREA''', '''aRea''', son 4 identificadores distintos. También comentar que, el último ejemplo, '''aRea''' no es recomendado, dado su poca legibilidad.<br />
<br />
=== Palabras clave ===<br />
* Python tiene 30 palabras reservadas que no podremos utilizar para ningún tipo de identificador:<br />
{| border="1" cellspacing="0" cellpadding="5" <br />
|-<br />
| and<br />
| del<br />
| for<br />
| is<br />
| raise<br />
|-<br />
| assert<br />
| elif<br />
| from<br />
| lambda<br />
| return<br />
|-<br />
| break<br />
| else<br />
| global<br />
| not<br />
| try<br />
|-<br />
| class<br />
| except<br />
| if<br />
| or<br />
| while<br />
|-<br />
| continue<br />
| exec<br />
| import<br />
| pass<br />
| with<br />
|-<br />
| def<br />
| finally<br />
| in<br />
| print<br />
| yield<br />
|-<br />
|}<br />
<br />
=== Operadores ===<br />
* Python utiliza caracteres no alfanuméricos y combinación de caracteres como operadores.<br />
: Se reconocen los siguientes operadores:''' + - * / % ** // << >> & | ^ ~ < <= > >= <> != =='''<br />
<br />
=== Delimitadores ===<br />
* Python utiliza los siguientes símbolos y combinación de símbolos como delimitadores en expresiones, listas, diccionarios, etc: ''' ( ) [ ] { , : . ` = ; += -= *= /= //= %= &= |= ^= >>= <<= **= '''<br />
* Los siguientes caracteres tienen un especial significado como parte de otros símbolos: ''' ' " # \ '''<br />
* Los caracteres '''$''' y '''?''' y todos los caracteres de control nunca podrán ser parte de un programa Python, excepto en comentarios y ''strings''.<br />
* La utilización de '''@''' también está limitado en algunas versiones.<br />
<br />
=== Literales ===<br />
* Un ''literal'' es un número o un ''string'' que aparece directamente en un programa.<br />
: Los siguientes son literales en Python:<br />
<source lang="Python"><br />
42 # Entero<br />
3.14 # Punto flotante<br />
1.0j # Imaginario<br />
'hola' # String<br />
"mundo" # Otro string<br />
"""Buenas<br />
noches""" # String limitado con tres comillas<br />
</source><br />
: Utilizando literales y delimitadores, se pueden crear distintos tipos de datos:<br />
<source lang="Python"><br />
[ 42, 3.14, 'hola' ] # Lista<br />
( 100, 200, 300 ) # Tupla<br />
{ 'x':42, 'y':3.14 } # Diccionario<br />
</source><br />
<br />
== Declaraciones ==<br />
* Se puede considerar un archivo fuente de Python como una secuencia de declaraciones. <br />
=== Declaraciones simples ===<br />
* Se trata de declaraciones que tienen sólo una declaración, sin ninguna más.<br />
: Ocupan una linea lógica.<br />
: Varias declaraciones simples pueden ocupar una única linea física si se separan éstas con ";". Pero esto no es normal hacerlo en Python.<br />
<br />
=== Declaraciones compuestas ===<br />
* Una sentencia compuesta contiene una o más sentencias simples y el control de su ejecución.<br />
: Todas las cláusulas que componen la declaración compuesta deben estar alineadas en la misma sangría.<br />
: Cada cláusula tiene un encabezado a partir de una palabra clave y debe terminar con dos puntos (:), seguida luego por un cuerpo, que es una secuencia de una o más sentencias.<br />
:: Cuando el cuerpo contiene varias sentencias (bloque), éstas deben estar colocadas en líneas lógicas con una sangría de cuatro espacios con respecto a la cabecera.<br />
:: El bloque léxicamente termina cuando el sangrado vuelve a la altura de la cabecera.<br />
<br />
== Problemas resueltos ==<br />
'''1.- ¿Cuál de los identificadores siguientes es válido y cuál no?'''<br />
{| border = "1"<br />
| ''casa'' || ''mi-casa'' || ''mi*casa'' || ''micasa1''<br />
|- <br />
| ''_MES'' || ''MES_1'' || ''MES%UNO'' || mes$1<br />
|-<br />
| ''a980'' || ''890a'' || ''_890'' || ''$a890''<br />
|}<br />
: '''Resolución:'''<br />
:: Los identificadores '''mi-casa''', '''mi*casa''', '''MES%UNO''', '''mes$1''' y '''$a890''' no son válidos porque utilizan sepadadores no aceptados por Pyhton. Por otra parte '''890a''' no es válido porque los identificadores no pueden empezar por un número.<br />
:<br />
'''2.- Indicar si los siguientes identificadores son el mismo para Python'''<br />
: ''Traca'', ''traca'', ''traCa''.<br />
: '''Resolución:'''<br />
:: Son distintos porque Python es sensible a los caracteres en minúscula y en mayúscula.<br />
<br />
<br />
-- [[Python3|Volver]]</div>Vieites