2.2. Variáveis e tipos básicos#
Uma variável é um nome que se associa a um valor com o operador =. Após a atribuição, o nome pode ser usado em qualquer lugar onde o valor possa ser usado:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
O lado direito de = é avaliado primeiro, depois o resultado é associado ao nome do lado esquerdo. Ler um nome que nunca foi atribuído lança NameError.
Uma variável é apenas uma etiqueta. Aponta para um valor – o valor vive algures, e o mesmo valor pode ter qualquer número de etiquetas.
As variáveis são etiquetas que apontam para valores. Reatribuir uma variável move a etiqueta; não altera o valor para o qual a etiqueta apontava.#
2.2.1. Regras de nomenclatura#
Os nomes começam com uma letra ou sublinhado e podem conter letras, dígitos e sublinhados.
frame_counte_internalsão válidos;1st_frameé um erro de sintaxe.Os nomes são sensíveis a maiúsculas/minúsculas:
Widthewidthsão duas variáveis diferentes.Evite reutilizar nomes incorporados como
list,str,id()ouprint()– sombreá-los não gera um erro, mas o incorporado original fica inacessível pelo resto do script.Convenção:
snake_casepara variáveis e funções,ALL_CAPSpara constantes que não tenciona alterar,CamelCasepara nomes de classes.
2.2.2. Tipos básicos#
Cada valor em Python tem um tipo que determina as operações que suporta. Os quatro tipos que escreverá com mais frequência são:
int – números inteiros, positivos ou negativos. Os inteiros MicroPython crescem tanto quanto a memória permite. Os literais são escritos como dígitos simples:
0,42,-7. Os literais hexadecimal (0x1A), octal (0o17) e binário (0b1010) também são válidos e úteis para registos e máscaras de bits.float – números com ponto decimal ou expoente:
3.14,1.0,-0.5,2e6(= 2 000 000.0). Todos os floats na câmara são IEEE 754 de 32 bits – precisos até cerca de sete algarismos significativos.bool – um dos dois literais
TrueouFalse(note a capitalização).str – texto, escrito como caracteres entre aspas simples ou duplas:
"hello",'OpenMV'. Ambos os estilos de aspas são equivalentes; escolha aquele que lhe permite evitar escapar os caracteres de aspas que aparecem dentro da string.
Existe também um quinto valor que vale conhecer de imediato:
None – o valor único do tipo
NoneType. Usado para significar «sem valor» ou «ainda não definido». Funções que não devolvem explicitamente nada devolvem implicitamenteNone.
2.2.3. Verificar e converter tipos#
A função incorporada type() devolve o tipo de qualquer valor:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Cada tipo também funciona como função de conversão. Passe-lhe um valor de um tipo diferente e obtém de volta o valor equivalente do novo tipo – quando a conversão está bem 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)
As conversões que não estão bem definidas lançam 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. Reatribuição e tipagem dinâmica#
Um nome pode ser reatribuído a um valor de qualquer tipo em qualquer momento. O seguinte é legal:
x = 42
x = "now I'm a string"
x = 3.14
O Python não associa uma variável a um tipo. O código que depende de x ser um inteiro simplesmente espera um inteiro no ponto onde o usa; se obtiver outra coisa, terá um TypeError em tempo de execução.
Nota
Reatribuir x não altera o valor para o qual a antiga associação apontava. Se dois nomes partilham o mesmo valor, reatribuir um não afeta o outro:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Mutar um valor partilhado é diferente: um método como list.append altera o valor para o qual a associação aponta, por isso todos os outros nomes que apontam para esse mesmo valor verão a alteração.