Variables

En esta lección se tratan aspectos generales de las variables.

Qué es una variable

Variables en Matemáticas

El concepto de "variable" proviene de las Matemáticas. En Matemáticas, una variable es un símbolo que forma parte de una expresión o de una fórmula. Normalmente las variables se representan mediante letras del alfabeto latino ( x, y, z, n, i, j, etc.). Dependiendo del contexto, las variables significan cosas distintas. Por ejemplo:

Variables en Programación

En Programación también existe el concepto de "variable", parecido pero no idéntico al concepto matemático.

En Programación, las variables están asociadas a variables concretos. Además, cada lenguaje de programación tiene su forma de implementar el concepto de variable, por lo que lo que se explica a continuación es válido para muchos lenguajes de programación, aunque otros lenguajes de programación permiten otras posibilidades.

Variables en Python

En algunos lenguajes de programación, las variables se pueden entender como "cajas" en las que se guardan los datos, pero en Python las variables son "etiquetas" que permiten hacer referencia a los datos (que se guardan en unas "cajas" llamadas objetos).

Python es un lenguaje de programación orientado a objetos y su modelo de datos también está basado en objetos.

Para cada dato que aparece en un programa, Python crea un objeto que lo contiene. Cada objeto tiene:

Así, las variables en Python no guardan los datos, sino que son simples nombres para poder hacer referencia a esos objetos. Si escribimos la instrucción ...

a = 2

... Python:

Así, al describir la instrucción anterior no habría que decir 'la variable a almacena el número entero 2', sino que habría que decir 'podemos llamar a al objeto número entero 2'. La variable a es como una etiqueta que nos permite hacer referencia al objeto "2", más cómoda de recordar y utilizar que el identificador del objeto.


Por otro lado, en Python se distingue entre objetos mutables y objetos inmutables:

En el caso de los objetos inmutables (como los números) no hay mucha diferencia entre considerar la variable como una caja o como una etiqueta, pero en el caso de los objetos mutables (como las listas) pensar en las variables como cajas puede llevar a error.

Por economía del lenguaje, en estos apuntes se utilizan expresiones como "guardar un valor en una variable" en vez de "guardar el valor en un objeto y asociar una variable al objeto", pero el alumno debe tener presente lo que ocurre en realidad en Python.

Más adelante en este curso, en las lecciones Variables 2 y Variables 3, se profundiza en la idea de variable de Python.

Definir una variable

Las variables en Python se crean cuando se definen por primera vez, es decir, cuando se les asigna un valor por primera vez. Para asignar un valor a una variable se utiliza el operador de igualdad (=). A la izquierda de la igualdad se escribe el nombre de la variable y a la derecha el valor que se quiere dar a la variable.

En el ejemplo siguiente se almacena el número decimal 2.5 en una variable de nombre x (como se comenta en el apartado anterior, realmente habría que decir que se crea la etiqueta x para hacer referencia al objeto número decimal 2.5). Fíjese en que los números decimales se escriben con punto (.) y no con coma (,).

>>> x = 2.5

La variable se escribe siempre a la izquierda de la igualdad. Si se escribe al revés, Python genera un mensaje de error:

>>> 2.5 = x
SyntaxError: can't assign to literal

Para que IDLE muestre el valor de una variable, basta con escribir su nombre:

>>> x = 2.5
>>> x
2.5

Si una variable no se ha definido previamente, escribir su nombre genera un mensaje de error:

>>> x = -10
>>> y
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    y
NameError: name 'y' is not defined

Una variable puede almacenar números, texto o estructuras más complicadas (que se verán más adelante). Si se va a almacenar texto, el texto debe escribirse entre comillas simples (') o dobles ("), que son equivalentes. A las variables que almacenan texto se les suele llamar cadenas (de texto).

>>> nombre = "Pepito Conejo"
>>> nombre
'Pepito Conejo'

Si no se escriben comillas, Python supone que estamos haciendo referencia a otra variable (que, si no está definida, genera un mensaje de error):

>>> nombre = Pepe
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    nombre = Pepe
NameError: name 'Pepe' is not defined
>>> nombre = Pepito Conejo
SyntaxError: invalid syntax

Borrar una variable

La instrucción del borra completamente una variable.

>>> nombre = "Pepito Conejo"
>>> nombre
'Pepito Conejo'
>>> del nombre
>>> nombre
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    nombre
NameError: name 'nombre' is not defined

Nombres de variables

Aunque no es obligatorio, se recomienda que el nombre de la variable esté relacionado con la información que se almacena en ella, para que sea más fácil entender el programa. Si el programa es trivial o mientras se está escribiendo un programa, esto no parece muy importante, pero si se consulta un programa escrito por otra persona o escrito por uno mismo pero hace tiempo, resultará mucho más fácil entender el programa si los nombres están bien elegidos.

También se acostumbra a utilizar determinados nombres de variables en algunas ocasiones, como se verá más adelante, pero esto tampoco es obligatorio.


El nombre de una variable debe empezar por una letra o por un guion bajo (_) y puede seguir con más letras, números o guiones bajos.

>>> _x = 3.8
>>> _x
3.8
>>> x1 = 100
>>> x
100
>>> fecha_de_nacimiento = "27 de octubre de 1997"
>>> fecha_de_nacimiento
'27 de octubre de 1997'

Los nombres de variables no pueden incluir espacios en blanco.

>>> fecha de nacimiento = "27 de octubre de 1997"
SyntaxError: invalid syntax

Los nombres de variables pueden contener cualquier carácter alfabético (los del alfabeto inglés, pero también ñ, ç o vocales acentuadas), aunque se recomienda utilizar únicamente los caracteres del alfabeto inglés.

>>>año = 1997

Nota: En Python 2 los nombres de variables no podían contener caracteres no ingleses.


Los nombres de las variables pueden contener mayúsculas, pero tenga en cuenta que Python distingue entre mayúsculas y minúsculas (en inglés se dice que Python es case-sensitive).

>>> nombre = "Pepito Conejo"
>>> Nombre = "Numa Nigerio"
>>> nomBre = "Fulanito Mengánez"
>>> nombre
'Pepito Conejo'
>>> Nombre
'Numa Nigerio'
>>> nomBre
'Fulanito Mengánez'

Cuando el nombre de una variable contiene varias palabras, se aconseja separarlas con guiones bajos para facilitar la legibilidad, aunque también se utiliza la notación camelCase, en las que las palabras no se separan pero empiezan con mayúsculas (salvo la primera palabra).

>>> fecha_de_nacimiento = "27 de octubre de 1997"
>>> fechaDeNacimiento = "27 de octubre de 1997"

Las palabras reservadas del lenguaje (las que IDLE escribe en naranja) están prohibidas como nombres de variables:

>>> lambda = 3
SyntaxError: invalid syntax

Los nombres de las funciones integradas sí que se pueden utilizar como nombres de variables, pero más vale no hacerlo porque a continuación ya no se puede utilizar la función como tal:

>>> print = 3
>>> print("Hola")
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print("Hola")
TypeError: 'int' object is not callable

Borrando con del la variable con nombre de función, se recupera la función.

>>> print = 3
>>> print("Hola")
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print("Hola")
TypeError: 'int' object is not callable
>>> del print
>>> print("Hola")
Hola

Tipos de variables

En el apartado anterior hay definiciones de algunos de los tipos de variables que hay en Python: números decimales, números enteros y cadenas (una o más letras).

Aunque se definan de forma similar, para Python no es lo mismo un número entero, un número decimal o una cadena ya que, por ejemplo, dos números se pueden multiplicar pero dos cadenas no (curiosamente, una cadena sí que se puede multiplicar por un número).

Por tanto, estas tres definiciones de variables no son equivalentes:

>>> fecha = 1997
>>> fecha = 1997.0
>>> fecha = "1997"
>>> fecha = [27, "octubre", 1997]

En el primer caso la variable fecha está almacenando un número entero, en el segundo fecha está almacenando un número decimal y en el tercero fecha está almacenando una cadena de cuatro letras. En el cuarto, fecha está almacenando una lista (un tipo de variable que puede contener varios elementos ordenados).

Este ejemplo demuestra también que se puede volver a definir una variable. Python modifica el tipo de la variable automáticamente.

Mostrar el valor de las variables en IDLE

Para que IDLE muestre el valor de una variable, basta con escribir su nombre.

>>> a = 2
>>> a
2

También se puede conocer el valor de varias variables a la vez escribiéndolas entre comas (IDLE las mostrará entre paréntesis porque Python las considera como un conjunto ordenado llamado tupla), como muestra el siguiente ejemplo:

>>> a = b = 2
>>> c = "pepe"
>>> a
2
>>> c, b
('pepe', 2)

Utilizar o modificar variables ya definidas

Una vez se ha definido una variable, se puede utilizar para hacer cálculos o para definir nuevas variables, como muestran los siguientes ejemplos:

>>> a = 2
>>> a + 3
5
>>> horas = 5
>>> minutos = 60 * horas
>>> segundos = 60 * minutos
>>> segundos
18000
>>> horas = 1
>>> minutos = 2
>>> segundos = 3
>>> segundos + 60 * minutos + 3600 * horas
3723

En caso de utilizar una variable no definida anteriormente, Python genera un mensaje de error.

>>> dias = 7 * semanas
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    dias = 7 * semanas
NameError: name 'semanas' is not defined

Se puede redefinir una variable a partir de su propio valor. Por ejemplo

>>> a = 10
>>> a = a + 5
>>> a
15

Esto es posible porque el símbolo de igualdad significa siempre asignación. Lo que hace Python es calcular la expresión situada a la derecha de la igualdad y después guardar el resultado en la variable situada a la izquierda de la igualdad. En el ejemplo, Python coge el valor almacenado en la variable a (10), le suma 5, y el resultado (15) lo guarda en la misma variable a.

Es importante tener presente que las igualdades son siempre asignaciones, nunca ecuaciones. En el ejemplo, la expresión a = a + 5 no tendría mucho sentido como ecuación (no tendría solución), pero como asignación lo que hace es aumentar en 5 el valor de la variable a.


Es importante también tener presente que los nombres de las variables no tienen sentido real para Python, son simples etiquetas para referirse al contenido.

Por ejemplo, en el siguiente ejemplo se crean dos variables y se suman, aunque en el mundo real hay gente que opina que se pueden sumar peras y manzanas ;-):

>>> peras = 7
>>> manzanas = 22
>>> peras + manzanas
29

O el siguiente ejemplo en el que Python permite realizar cualquier operación con las variables distancia y tiempo, aunque no tengan sentido físico (de hecho, sólo la división lo tiene, es la velocidad).

>>> distancia = 100
>>> tiempo = 4
>>> distancia + tiempo
104
>>> distancia * tiempo
400
>>> distancia / tiempo
25.0

Cuando se modifica una variable, el valor anterior se pierde y no se puede recuperar (salvo si se realiza la operación contraria o hay otra variable que conserva el valor anterior).


Hay que tener cuidado al modificar una variable que se ha utilizado para definir otras variables, porque esto puede afectar al resto de variables:

Nota: Este punto se trata con más detalle en la lección Variables 2.

Asignaciones aumentadas

Cuando una variable se modifica a partir de su propio valor, se puede utilizar la denominada "asignación aumentada", una notación compacta que existe también en otros lenguajes de programación.

Por ejemplo:

>>> a = 10
>>> a += 5
>>> a
15

es equivalente a:

>>> a = 10
>>> a = a + 5
>>> a
15

En general:

Asignación aumentada: es equivalente a:
a += b a = a + b
a -= b a = a - b
a *= b a = a * b
a /= b a = a / b
a **= b a = a ** b
a //= b a = a // b
a %= b a = a % b

Nota: Las dos notaciones son completamente equivalentes en el caso de los objetos inmutables (números, cadenas, tuplas), pero en el caso de los objetos mutables (listas, diccionarios, etc.) hay una pequeña diferencia que se comenta en la lección Variables 2

En Python no existen los operadores incremento (++) o decremento (--) que sí existen en otros lenguajes de programación:

>>> a = 5
>>> a++
SyntaxError: invalid syntax

Definir y modificar varias variables a la vez

En una misma línea se pueden definir simultáneamente varias variables, con el mismo valor o con valores distintos, como muestra el siguiente ejemplo:

>>> a = b = 99
>>> c, d, e = "Mediterráneo", 10, ["pan", "queso"]

En el primer caso las dos variables tendrán el mismo valor. En el segundo caso la primera variable tomará el primer valor y así sucesivamente.


Si el número de variables no coincide con el de valores, Python genera un mensaje de error.

>>> a, b, c = 1, 2
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    a, b, c = 1, 2
ValueError: need more than 2 values to unpack
>>> a, b, c = 1, 2, 3, 4
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    a, b, c = 1, 2, 3, 4
ValueError: too many values to unpack

Se pueden modificar varias variables en una sola instrucción y la modificación se realiza en un solo paso.

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a, b = b, a
>>> a, b
(10, 5)

Obsérvese que si este procedimiento lo hubiéramos hecho paso a paso, el resultado hubiera sido distinto:

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a = b
>>> b = a
>>> a, b
(10, 10)

El motivo de este resultado se entiende fácilmente mostrando los valores tras cada operación:

>>> a, b = 5, 10
>>> a, b
(5, 10)
>>> a = b
>>> a, b
(10, 10)
>>> b = a
>>> a, b
(10, 10)