Dos de los conceptos más importantes en los lenguajes de programación son el concepto de variable y el de función.
Una variable no es más que un nombre que usamos para referirnos de forma rápida (nemotécnica) a un valor. Por ejemplo, podemos asociar el valor 3.1415926535 a la variable pi de la siguiente forma pi = 3.1415926535. A la acción de asignar un nombre a un valor se le llama asignación (del valor a la variable). Los tipos de más importantes de variables son:
Números: enteros (como 10), reales (como 1.414213), complejos (como 3+2j).
Texto (como "hola").
Resultados de operaciones lógicas (booleanos como True o False).
Recuerda:
En un programa, cada variable tiene nombre, valor y tipo.
No se puede usar una variable antes de haberle asignado un valor.
Sobre los nombres de variable:
Los nombres de variable tiene ciertas restricciones. Por ejemplo, pueden contener números pero no como primer carácter (valor_1 es correcto pero no 1er_valor).
El nombre sólo pueden usar letras o números (y subrayados).
Conviene utilizar nombre significativos que ayuden a entender el programa: por ejemplo, es mejor radio_de_la_circunferencia = 2 que r = 2.
Sobre los valores:
Las comillas se utilizan para escribir texto: no es lo mismo print hola que print "hola"
Los valores reales se reconocen por la coma flotante (el punto, en inglés, como en 3.14) y los complejos por la unidad imaginaria (como en 1 + 1j).
Sobre los tipos:
Los tipos más habituales son texto (str), entero (int), real (float), complejo (complex) y booelano (bool):
En python, puedes saber de qué tipo es una variable llamada mi_var escribiendo type(mi_var)
Normalmente no es posible combinar el valor de dos variables cuando son de tipo distinto. Examina, por ejemplo "hola" + "adiós", "hola" + 5, 2 + 3, y 2 + 4.3. ¿De qué tipo es el resultado?
Así como las variables sirven para recordar valores, las funciones sirven para reutilizar operaciones. Con frecuencia una misma secuencia de operaciones debe ejecutarse más de una vez para realizar un cálculo. Por ejemplo, para calcular el coseno del ángulo entre dos vectores X = (x1, x2) y Y = (y1, y2) podemos escribir:
c = (x1 * y1 + x2 * y2) / pow( (x1 * x1 + x2 * x2) * (y1 * y1 + y2 * y2), 0.5)
Sin embargo, si tuviésemos definido eprod como el producto escalar de dos vectores, resulta mucho más legible escribir:
c = eprod(X,Y)/pow(eprod(X, X) * eprod(Y, Y), 0.5)
En este ejemplo, tanto eprod como pow son funciones (la segunda está predefinida en Python). Una función transforma unos parámetros en un resultado. Por ejemplo, eprod(X, Y) transforma dos vectores X e Y en un número real que es el valor del producto escalar XY.
El uso de funciones permite:
Escribir código más legible y compacto.
Evitar errores ("Tanto va el cántaro a la fuente,...").
Como es natural, antes de usar una función, ésta debe haber sido definida (salvo que sea parte del lenguaje de programación). En Python se puede definir un función nueva de la siguiente forma:
# Scalar product of two dimensional vectors
def eprod2 (X, Y):
return X[0] * Y[0] + X[1] * Y[1]
En Python (y en la mayoría de los lenguajes de programación) se escribe una instrucción por línea.
Normalmente, la última línea de una función es la instrucción return, que indica cuál es le valor que devuelve la función, esto es, el resultado del cálculo.
Nótese el sangrado del cuerpo de la función: la secuencia de instrucciones que se deben ejecutar para calcular el resultado de la función debe estar desplazado hacia la derecha respecto al anuncio de que la función va a ser declarada (la línea que empieza por la palabra def y termina en dos puntos).
Después de su definición, es posible utilizar la función en cualquier otro sitio del programa (sin sangrado). Por ejemplo, podemos escribir:
# Scalar product of two dimensional vectors
def eprod2 (X, Y):
return X[0] * Y[0] + X[1] * Y[1]
# An example
X =(2, 3)
Y = (1.5, -1)
print eprod2(X, Y)
Nota: las líneas que comienzan por el símbolo # no se ejecutan y reciben el nombre de comentarios: se utilizan para explicar el significado del programa.
A continuación transformaremos esta función para que devuelva el producto escalar de dos vectores de dimensión arbitraria.
Comienza estudiando el caso en el que X e Y son de dimensión 100.