sentencias básicas
Sentencias (Programación). Son las unidades ejecutable más pequeña de un programa, en otras palabras una línea de código escrita es una sentencia. Especifican y controlan el flujo y orden de ejecución del programa. Una sentencia consta de palabras clave o reservadas como (cout, cin, for, while, if... else, etc.), expresiones, declaraciones, o llamadas a funciones.
| Sentencias | Rol | Ejemplo |
| Asignación | Crear referencias | a, *b = 'bueno', 'malo', 'tonto' |
| Llamadas y otras expresiones | Ejecutando funciones | log.write("spam, ham") |
| imprimir objetos | print(" | |
| if/elif/else | Seleccionando acciones | if "python" in text:
print(text)
|
| for/else | Secuencia e iteración | for x in mylist:
print(x)
|
| while/else | Loop general | while X > Y:
print('hello')
|
| pass | marcador de posición de vacío | while True:
pass
|
| break | finalizar loop | while True:
if exittest(): break
|
| continue | continúa el loop | while True:
if skiptest(): continue
|
| def | Funciones y métodos | def f(a, b, c=1, *d):
return a+b+c+d[0]
|
| yield | Generador de funciones | def gen(n):
for i in n: yield i*2
|
| global | espacio de nombres (namespaces) | x = 'old' def function():
global x, y; x = 'new'
|
| import | acceso a módulos | import sys |
| from | acceso a atributos | from sys import stdin |
| class | construcción de objetos | class Subclase(Superclase):
staticData = []
def method(self): pass
|
| try/except/finally | Capturar excepciones | try: action() except: print('action error') |
| raise | generar excepciones | raise EndSearch (location) |
| assert | Depuración de los controles | assert X > Y, 'X demasiado pequeno' |
| with/as | Manejadores de contexto | with open('data') as myfile: process(myfile) |
| del | Eliminar referencias | del data[k] del data[i:j] del obj.attr del variable |
sentencias de condición o bifurcaciones
Echa un vistazo a la siguiente expresión:
if 2 > 3:
print("Python no funciona: cree que 2 es mayor que 3.")
print("Python no funciona: cree que 2 es mayor que 3.")
elif 2 == 3:
print("Tampoco: ahora cree que 2 es igual a 3.")
print("Tampoco: ahora cree que 2 es igual a 3.")
else:
print("Efectivamente, 2 es menor que 3. Y así debe ser.")
print("Efectivamente, 2 es menor que 3. Y así debe ser.")
Si no sabes inglés, simplemente te faltaba por saber que if significa “si”, sin tilde, condicional; else significa “en otro caso”, o “si no”;elif es simplemente una contracción de else e if. La parte de elif se podría haber omitido (es opcional) o repetido muchas veces, para evaluar toda una retahíla de condiciones alternativas. El final de la construcción,else, también es opcional pero sólo puede escribirse una vez.
Es obvio que el resultado de la sentencia de ejemplo va a ser la frase “Efectivamente, 2 es menor que 3. Y así debe ser.”
Así, queda clara la estructura de las condiciones en Python: se escriben usando la sentencia compuesta if… elif… else. Nos proporciona una forma de especificar una condición principal que si se cumple, ejecuta un bloque de código. Para los casos en los que esa condición no se cumpla, podremos opcionalmente especificar una serie arbitrariamente larga de condiciones alternativas que si se cumpliesen, harían que el intérprete de Python ejecutase otros bloques de código. Por último podremos especificar opcionalmente un último miembro que se ejecutará si todo lo demás es falso.
Es obvio que el resultado de la sentencia de ejemplo va a ser la frase “Efectivamente, 2 es menor que 3. Y así debe ser.”
Así, queda clara la estructura de las condiciones en Python: se escriben usando la sentencia compuesta if… elif… else. Nos proporciona una forma de especificar una condición principal que si se cumple, ejecuta un bloque de código. Para los casos en los que esa condición no se cumpla, podremos opcionalmente especificar una serie arbitrariamente larga de condiciones alternativas que si se cumpliesen, harían que el intérprete de Python ejecutase otros bloques de código. Por último podremos especificar opcionalmente un último miembro que se ejecutará si todo lo demás es falso.
Las condiciones de esta sentencia compuesta son excluyentes, tal y como marcan las conjunciones inglesas “else”, que podemos entender como “por el contrario”. if… elif… else especifica lo que se conoce como un árbol de reglas: en el momento en el que se cumple una de sus condiciones, el código toma una dirección y el resto del árbol no se evalúa. Es algo que quiero enfatizar de forma muy clara con un ejemplo:
if 3 > 2:
print ("3 es mayor que 2.")
elif 3 < 5:
print ("3 es menor que 3.")
elif 4 < 9:
print ("4 es menor que 9.")
else:
print ("Si lees esto, no sé qué está pasando.")
print ("Si lees esto, no sé qué está pasando.")
como pueden notar todas las condiciones son ciertas. Sin embargo sólo se va a imprimir la primera cadena, "3 es mayor que 2.". En cuanto Python encuentra una rama del árbol que se cumple, ejecuta su bloque y termina. Ni siquiera se ha molestado en evaluar el resto de las reglas.
Si quisiéramos evaluar estas reglas en cascada en lugar de en forma de árbol, es decir, una detrás de otra, deberíamos haber escrito lo siguiente (si lo intentas copiar todo en un bloque no funcionará, copia de una en una):
if 3 > 2:
print ("3 es mayor que 2.")
if 3 < 5:
print ("3 es menor que 5.")
print ("3 es menor que 5.")
if 4 < 9:
print ("4 es menor que 9.")
if not (3 > 2 and 3 < 5 and 4 < 9):
print ("Si lees esto, no sé qué está pasando.")
Si las transcribes todas, por cierto, verás que la última no se ejecuta. Esa condición compuesta es equivalente a un else con respecto a todas las anteriores.
sentencias de repetición
Además de condicionar el flujo de nuestros algoritmos, también podemos
agregarles bucles es decir (bloques que se repiten) que le darán un poco más de
complejidad y capacidad. Ya que en todo programa suele hacer falta que un
determinado conjunto de instrucciones se ejecute más de una vez. En ese caso no
es adecuado multiplicar las líneas del programa copiando y pegando esa
secuencia, sino que es mucho más eficaz usar una estructura de control que nos
permite decirle al intérprete que queremos repetir una parte del programa
varias veces. Dependiendo de lo que necesitemos, Python tiene dentro de su
sintaxis dos estructuras de bucle que son: while y for.
Bucle while: Ese tipo de bucle repite un conjunto de
instrucciones mientras se cumpla una determinada condición que se evalúa al
principio de cada ejecución. Es evidente que las instrucciones del interior del
bucle tendrán que hacer algo que pueda cambiar esa condición hasta que en algún
momento deje de cumplirse. En caso contrario tendremos un bucle infinito y el
programa no terminará nunca su ejecución.
while ((entrada !=
"s") and (entrada != "n"):
entrada=raw_input("eres mayor de edad?
(s-n)
")
if
(entrada=="s"):
print("El usuario es mayor de
edad")
else:
print("El usuario es menor de
edad")
Una de las características del bucle
while es que no está fijado previamente el número de veces que se ejecutan
las instrucciones del bucle. Se ejecutarán todas las que sean necesarias
mientras se cumpla la condición.
Nota: Para crear un bucle while la condición
debe de estar dentro de paréntesis () seguidos de dos puntos:, luego lo que
hará el programa si se cumple la condición y lo que hará sino se cumple.
Bucle for: Los bucles for, a diferencia de otros
lenguajes de programación en Python tienen una estructura muy simple y potente.
Son una forma genérica de iterar sobre una secuencia. Podemos usar como
secuencia listas y tuplas (que
sirven para agrupar como si fueran un único valor, varios valores que por
naturaleza deben ir juntos) o generar una sentencia para ejecutar el bucle un
número determinado de veces. La diferencia con el bucle while es que en este caso las instrucciones dentro de él se
ejecutarán un número concreto de veces, que será el mismo que el número de
elementos que tenga la secuencia.
Veamos un ejemplo:
secuencia
= [“uno”, “dos”, “tres”]
for
elemento in secuencia:
print (elemento)
Me imagino que se preguntaran que donde deje la estructura “Switch”, que es una ramificación condicional con
muchos caminos, pero es que en Python esta sentencia no existe, aunque se
podría crear con un diccionario que es parecido a lo que en otros lenguajes se
llama array asociativo.
La mejor forma de escribir un código en el que se necesite Switch, sería
usar en su lugar (if-elif-else)
#!/usr/bin/python
que da como resultado:
>>>
Si se fijan en el primer ejemplo al llegar a la letra "h" simplemente se termina (rompe) el ciclo (bucle) y se sigue con el segundo ejemplo. En el segundo ejemplo la variable va disminuyendo su valor hasta que llega a 5, en donde se termina (rompe) el ciclo (bucle), mostrando el print final.
Continue
>>>
Sentencias que rompen ciclos: Break, continue,...
Este funciona tal como el break de C. Break se puede usas en bucles for y while y simplemente termina el bucle actual y continua con la ejecución de la siguiente instrucción, por ejemplo:
#!/usr/bin/python
# Primer ejemplo
for letra in
"Python":
if letra == "h":
break
print ("Letra actual :
" + letra)
# Segundo ejemplo
var = 10
while var > 0:
var = var -1
if var == 5:
break
print ("Valor actual de la variable : " + str(var))
print ("fin del script")
que da como resultado:
>>>
Letra actual : P
Letra actual : y
Letra actual : t
Valor actual de la variable : 9
Valor actual de la variable : 8
Valor actual de la variable : 7
Valor actual de la variable : 6
fin del script
Continue
Al aparecer un Continue en Python, este regresa al comienzo del bucle, ignorando todos los estamentos que quedan en la iteración actual del bucle e inicia la siguiente iteración. Queda más claro con un ejemplo:
Nota: al igual que break, se puede usas en los bucles for y while
System Message: ERROR/3 (<stdin>, line 63)
Error in "code-block" directive: unknown option: "linenos".
.. code-block::
python
:linenos: table
:linenostart: 1
#!/usr/bin/python
# segundo ejemplo
for letra in "Python":
if letra == "h":
continue
print ("Letra actual : " + letra)
# Primer ejemplo
var = 10
while var > 0:
var = var -1
if var == 5:
continue
print ("Valor actual de la variable
: " + str(var))
print ("fin del script")
que da como resultado:
>>>
Letra actual : P
Letra actual : y
Letra actual : t
Letra actual : o
Letra actual : n
Valor actual de la variable : 9
Valor actual de la variable : 8
Valor actual de la variable : 7
Valor actual de la variable : 6
Valor actual de la variable : 4
Valor actual de la variable : 3
Valor actual de la variable : 2
Valor actual de la variable : 1
Valor actual de la variable : 0
fin del script
En el primer ejemplo al llegar a la letra "h" simplemente termina esa iteración (ignorando al print que sigue en la linea 7) y continua con la siguientes iteraciones (letras o y n) hasta que se termina el ciclo (bucle).
En el segundo ejemplo la variable va disminuyendo su valor hasta que llega a 5, en donde se termina esa iteración del ciclo (bucle) y se continua con las iteraciones que siguen hasta que se termina el bucle y se llega al print final.
Sentencia Pass
Python incorpora una sentencia especial para indicar que no se debe realizar ninguna acción. Se trata de pass y especialmente útil cuando deseamos indicar que no se haga nada en una sentencia que requiere otra.
Por ejemplo en un sencillo while:
>>>
while True:
pass
Muchos desarrolladores emplean pass cuando escriben esqueletos de código que posteriormente rellenarán. Dado que inicialmente no sabemos qué código contendrá una determinada sentencia, es útil emplear pass para mantener el resto del programa funcional. Posteriormente, el esqueleto de código será rellenado con código funcional y la sentencia pass será reemplazada por otras que realicen una función específica.
La sentencia with se utiliza con objetos que soportan el protocolo de manejador de contexto y garantiza que una o varias sentencias serán ejecutadas automáticamente. Esto nos ahorra muchas líneas de código, a la vez que nos garantiza que ciertas operaciones serán realizadas sin que lo indiquemos explícitamente. Uno de los ejemplos más claros es cuando leemos un archivo de texto. Al terminar esta operación siempre es recomendable cerrar el archivo. Gracias a with esto ocurrirá automáticamente, sin necesidad de llamar al método close(). Por ejemplo:
>>> with open(r'codejobs.txt') as myfile:
for line in myfile:
print(line)
Goto
A diferencia de otros lenguajes, Python no incluye por defecto la funcionalidad goto(“ir a”, permite realizar saltos a diversas porciones del código), pero dada su flexibilidad, es posible implementar el operador utilizando este módulo.
Se trata de un decorador que emplea los módulos estándar dis y ctypes para reemplazar el byte-code generado por el intérprete e ingresar instrucciones de salto. Opera con las palabras label, para definir una determinada porción del código, y goto, para realizar el salto.
