Python: Variáveis e valores

Como criar variáveis a atribuir valores no Python


Autor: Réulison Silva Publicado em: Setembro 25, 2019

Se você não sabe nada sobre Python, confira os primeiros passos no Python.

Criando variáveis e atribuindo valores no Python

Para criar uma variável no Python, tudo o que você precisa fazer é especificar o nome da variável e atribuir um valor a ela.

<variable name> = <value>

Python usa = para atribuir valores a variáveis. Não há necessidade de declarar uma variável antes (ou atribuir um tipo de dado a ela), ao atribuir um valor a uma variável, a variável se inicializa com esse valor. Não há como declarar uma variável sem atribuir um valor inicial a ela.

# Integer
a = 2
print(a)
# Saída: 2

# Integer
b = 9223372036854775807
print(b)
# Saída: 9223372036854775807

# Ponto flutuante
pi = 3.14
print(pi)
# Saída: 3.14

# String
c = 'A'
print(c)
# Saída: A

# String
name = 'John Doe'
print(name)
# Saída: John Doe

# Boolean
q = True
print(q)
# Saída: True

# Valor vazio ou tipo de dados nulo
x = None
print(x)
# Saída: None

A atribuição de variáveis funciona da esquerda para a direita. Portanto, o exemplo a seguir apresentará um erro de sintaxe.

0 = x
=> Output: SyntaxError: can't assign to literal

Você não pode usar os comandos (keywords) do python como o nome de uma variável. Você pode ver a lista de keywords usando o seguinte comando:

import keyword
print(keyword.kwlist)

Regras para nomeação de variáveis:

Os nomes das variáveis devem começar com uma letra ou um underline:

 x = True # válido
 _y = True # válido

 9x = False # começando com um número
=> SyntaxError: invalid syntax

 $y = False # começando com um símbolo
=> SyntaxError: invalid syntax

O restante do nome da variável pode consistir em letras, números e underlines:

has_0_in_it = "válido"

Os nomes diferenciam maiúsculas de minúsculas:

x = 9
y = X*5
=>NameError: name 'X' is not defined

Embora não seja necessário especificar um tipo de dado ao declarar uma variável no Python, enquanto aloca o espaço necessário na memória para a variável, o interpretador do Python escolhe automaticamente o tipo interno mais adequado para ela:

a = 2
print(type(a))
# Saída: <type 'int'>

b = 9223372036854775807
print(type(b))
# Saída: <type 'int'>

pi = 3.14
print(type(pi))
# Saída: <type 'float'>

c = 'A'
print(type(c))
# Saída: <type 'str'>

name = 'John Doe'
print(type(name))
# Saída: <type 'str'>

q = True
print(type(q))
# Saída: <type 'bool'>

x = None
print(type(x))
# Saída: <type 'NoneType'>

Agora que você conhece os conceitos básicos de atribuição, vamos falar sobre o que realmente interessa.

Quando você usa = para fazer uma operação de atribuição, o que está à esquerda de = é um nome para o objeto à direita. Finalmente, what = does é atribuir a referência do objeto à direita e o nome à esquerda.

Exemplo:

a_name = an_object # "a_name" agora é um nome para a referência ao objeto "an_object" 

Portanto, a partir de muitos exemplos de atribuição, se escolhermospi = 3.14, pi será um nome (não exclusivamente, pois um objeto pode ter vários nomes) para o objeto 3.14. Se você não entender algo, consulte a documentação oficial do Python.

Você pode atribuir vários valores a várias variáveis em uma linha. Observe que deve haver o mesmo número de argumentos nos lados direito e esquerdo do operador =:

a, b, c = 1, 2, 3
print(a, b, c)
# Output: 1 2 3

a, b, c = 1, 2
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b, c = 1, 2
=> ValueError: need more than 2 values to unpack

a, b = 1, 2, 3
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b = 1, 2, 3
=> ValueError: too many values to unpack

O erro no último exemplo pode ser evitado atribuindo os valores restantes ao número igual de variáveis arbitrárias.

Essa variável dummy pode ter qualquer nome, mas é convencional usar o underline _ para atribuir valores:

a, b, _ = 1, 2, 3
print(a, b)
# Saída: 1, 2

Observe que o número de _ e o número de valores restantes devem ser iguais. Caso contrário, 'too many values to unpack error' é lançado como a seguir:

a, b, _ = 1,2,3,4
=>Traceback (most recent call last):
=>File "name.py", line N, in <module>
=>a, b, _ = 1,2,3,4
=>ValueError: too many values to unpack (expected 3)

Você também pode atribuir um valor único a várias variáveis simultaneamente.

a = b = c = 1
print(a, b, c)
# Saída: 1 1 1

Ao usar essa atribuição em sequência (ou cascata), é importante observar que todas as três variáveis a, b e c referem-se ao mesmo objeto na memória, um objeto int com o valor de 1.

Em outras palavras, a, b e c são três nomes diferentes dados ao mesmo objeto int. Atribuir um objeto diferente a um deles não irá alterar os outros, exatamente como a seguir:

a = b = c = 1 # todos os três nomes a, b e c referem-se ao mesmo objeto int com valor 1
print(a, b, c)
# Saída: 1 1 1

b = 2 # b agora se refere a outro objeto int, um com o valor 2
print(a, b, c)
# Saída: 1 2 1 # então a saída é como o esperado.

O exemplo acima também é válido para tipos mutáveis (como list, dict etc.), assim como para tipos imutáveis (como int, string, tuple, etc.):

x = y = [7, 8, 9] # x e y se referem ao mesmo objeto de lista que acabou de criar, [7, 8, 9]
x = [13, 8, 9] # x agora se refere a um objeto de lista diferente recém-criado, [13, 8, 9]
print(y) # y ainda se refere à lista em que foi atribuído
# Saída: [7, 8, 9]

As coisas são um pouco diferentes quando se trata de modificar o objeto (ao contrário de atribuir o nome a um objeto diferente, o que fizemos acima) quando a atribuição em cascata é usada para tipos mutáveis. Dê uma olhada abaixo:

x = y = [7, 8, 9] # x e y são dois nomes diferentes para o mesmo objeto de lista [7,8, 9]
x[0] = 13 # estamos atualizando o valor da lista [7, 8, 9] por um de seus nomes, x nesse caso
print(y) # imprimindo o valor da lista usando seu outro nome
# Saída: [13, 8, 9] # portanto, naturalmente a mudança é refletida

Listas aninhadas também são válidas em python. Isso significa que uma lista pode conter outra lista como um elemento.

x = [1, 2, [3, 4, 5], 6, 7] # esta é uma lista aninhada
print x[2] 
# Saída: [3, 4, 5] # esse array corresponde a 3º posição, a partir de 0, na lista
print x[2][1]
# Saída: 4 # 4 corresponde a 2º posição, a partir de 0, dentro da lista na 3º posição, também a partir de 0.

Por fim, as variáveis no Python não precisam permanecer do mesmo tipo que foram definidas pela primeira vez, você pode simplesmente usar = para atribuir um novo valor a uma variável, mesmo que esse valor seja de um tipo diferente.

a = 2
print(a)
# Saída: 2
a = "Novo valor"
print(a)
# Saída: Novo valor

Se isso o incomoda, pense no fato de que o que está à esquerda do operador = é apenas um nome para um objeto. Primeiro você chama o int objeto com o valor 2 para a , então você muda de ideia e decide atribuir um novo nome para a com um uma string "Novo valor". Simples, certo?

Achou que está faltando alguma coisa? Com certeza deve estar, deixe seu comentário.