2.2. Variables y tipos básicos#
Una variable es un nombre que asocias a un valor con el operador =. Tras la asignación, el nombre puede usarse en cualquier lugar donde pueda usarse el valor:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
El lado derecho de = se evalúa primero, y luego el resultado se asocia al nombre de la izquierda. Leer un nombre que nunca se asignó lanza NameError.
Una variable es solo una etiqueta. Apunta a un valor; el valor reside en otro lugar, y el mismo valor puede tener cualquier número de etiquetas.
Las variables son etiquetas que apuntan a valores. Reasignar una variable mueve la etiqueta; no cambia el valor al que la etiqueta solía apuntar.#
2.2.1. Reglas de nomenclatura#
Los nombres comienzan con una letra o un guion bajo y pueden contener letras, dígitos y guiones bajos.
frame_county_internalson válidos;1st_framees un error de sintaxis.Los nombres distinguen entre mayúsculas y minúsculas:
Widthywidthson dos variables diferentes.Evita reutilizar nombres incorporados como
list,str,id()oprint(): ensombrecerlos no genera un error, pero la función incorporada original queda inaccesible durante el resto del script.Convención:
snake_casepara variables y funciones,ALL_CAPSpara las constantes que no piensas cambiar,CamelCasepara los nombres de clases.
2.2.2. Tipos básicos#
Cada valor en Python tiene un tipo que determina qué operaciones admite. Los cuatro tipos que escribirás con más frecuencia son:
int – números enteros, positivos o negativos. Los enteros de MicroPython crecen tanto como la memoria lo permita. Los literales se escriben como dígitos sencillos:
0,42,-7. Los literales hexadecimales (0x1A), octales (0o17) y binarios (0b1010) también son válidos y útiles para registros y máscaras de bits.float – números con un punto decimal o un exponente:
3.14,1.0,-0.5,2e6(= 2 000 000.0). Todos los flotantes de la cámara son IEEE 754 de 32 bits, precisos hasta unos siete dígitos significativos.bool – uno de los dos literales
TrueoFalse(fíjate en el uso de mayúsculas).str – texto, escrito como caracteres entre comillas simples o dobles:
"hello",'OpenMV'. Ambos estilos de comillas son equivalentes; elige el que te permita evitar escapar los caracteres de comillas que aparezcan dentro de la cadena.
También hay un quinto valor que conviene conocer de inmediato:
None – el único valor del tipo
NoneType. Se usa para significar «sin valor» o «aún no establecido». Las funciones que no devuelven explícitamente nada devuelven implícitamenteNone.
2.2.3. Comprobar y convertir tipos#
La función incorporada type() devuelve el tipo de cualquier valor:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Cada tipo también actúa como una función de conversión. Pásale un valor de un tipo diferente y obtendrás de vuelta el valor equivalente del nuevo tipo, cuando la conversión está bien definida:
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
Las conversiones que no están bien definidas lanzan ValueError:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Reasignación y tipado dinámico#
Un nombre puede reasignarse a un valor de cualquier tipo en cualquier momento. Lo siguiente es válido:
x = 42
x = "now I'm a string"
x = 3.14
Python no asocia una variable a un tipo. El código que depende de que x sea un entero simplemente espera un entero en el punto donde lo usa; si recibe otra cosa, obtienes un TypeError en tiempo de ejecución.
Nota
Reasignar x no cambia el valor al que apuntaba la asociación anterior. Si dos nombres comparten el mismo valor, reasignar uno no afecta al otro:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Mutar un valor compartido es diferente: un método como list.append cambia el valor al que apunta la asociación, de modo que cualquier otro nombre que apunte a ese mismo valor ve el cambio.