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.