Operadores de atribuição

Os operadores de atribuição em Python

O que são os operadores de atribuição

Os operadores de atribuição são usados para armazenar valores em variáveis, ou seja, para atribuir algo a elas. Eles aparecem em praticamente todo código Python, desde um simples x = 5 até expressões mais complexas.

O operador básico =

O operador de atribuição mais simples é o =, que já vimos em todos os exemplos em que armazenamos um valor em uma variável. Aqui, x recebe o número 5, e y recebe a string "Python":

1x = 5 2y = "Python" 3 4print(x) 5print(y) 6 7# Saída: 8# 5 9# Python

Operadores de atribuição compostos

O Python também oferece versões "encurtadas" dos operadores aritméticos. Eles realizam uma operação e reutilizam o próprio resultado na mesma variável, deixando o código mais curto e legível.

Em vez de escrever:

1x = x + 3

podemos simplificar para:

1x += 3

Vamos ver todos os operadores compostos e o que cada um faz.

OperadorExemploEquivalente aDescrição
+=x += 3x = x + 3Soma e atribui o resultado
-=x -= 3x = x - 3Subtrai e atribui o resultado
*=x *= 3x = x * 3Multiplica e atribui o resultado
/=x /= 3x = x / 3Divide e atribui o resultado
%=x %= 3x = x % 3Atribui o resto da divisão
//=x //= 3x = x // 3Faz divisão inteira e atribui o resultado
**=x **= 3x = x ** 3Eleva à potência e atribui o resultado

Adição (+=) e subtração (-=)

Esses são os mais usados no dia a dia. Eles consideram o valor que já existem dentro da variável e somam ou subtraem o valor que aparece após o operador:

1x = 10 2x += 5 # x = 10 + 5 3print(x) # Saída: 15 4 5x -= 3 # x = 15 - 3 6print(x) # Saída: 12

Repare que o valor de x muda a cada operação. O próprio Python atualiza o valor com base na conta feita.

Multiplicação (*=) e divisão (/=)

Assim como a adição e a subtração, esses operadores fazem o cálculo e armazenam o novo valor na própria variável. São úteis quando queremos atualizar o valor com base em uma multiplicação ou divisão sem precisar repetir o nome da variável.

1x = 4 2x *= 2 # x = 4 * 2 3print(x) # Saída: 8 4 5x /= 4 # x = 8 / 4 6print(x) # Saída: 2.0

Importante: Apesar do valor de x ser inteiro no começo, após a divisão, ele se torna um número do tipo float, porque o resultado de uma divisão comum em Python é sempre decimal.

Divisão inteira (//=) e módulo (%=)

Esses dois operadores lidam com divisões de forma mais específica. O operador //= atribui apenas a parte inteira da divisão à variável, enquanto %= atribui o resto dela.

1x = 17 2x //= 5 # x = 17 // 5 3print(x) # Saída: 3 4 5x %= 2 # x = 3 % 2 6print(x) # Saída: 1

Exponenciação (**=)

Da mesma forma, o operador **= calcula o valor inicial de x elevado ao número que aparece depois dele. O resultado da exponenciação é atribuído ao próprio x:

1x = 2 2x **= 3 # x = 2 ** 3 3print(x) # Saída: 8

Operadores bit a bit

Além dos operadores numéricos, também é possível combinar operadores de atribuição com operações bit a bit, que trabalham com os valores binários. Esses operadores aparecem com menos frequência no dia a dia, então não vamos nos aprofundar neles por enquanto.

O operador walrus (:=)

A partir do Python 3.8, surgiu um novo operador de atribuição chamado operador walrus (:=), que permite atribuir e usar um valor ao mesmo tempo dentro de uma expressão.

Veja os exemplos sem e com o operador :=:

1# sem o operador 2 3frase = "Python é divertido!" 4print(frase) 5 6# Saída: 7# Python é divertido! 8 9 10# com o operador 11 12print(frase := "Python é divertido!") 13 14# Saída: 15# Python é divertido!
1# sem o operador 2 3y = 10 4x = y + 5 5 6print(x, y) 7 8# Saída: 9# 15 10 10 11 12# com o operador 13 14x = (y := 10) + 5 15print(x, y) 16 17# Saída: 18# 15 10

Perceba que frase e y são criadas e usadas na mesma linha quando usamos o operador. Nesse caso, pode não parecer tão diferente, mas conforme você for fazendo operações mais complexas, você vai perceber como ele deixa o código bem mais conciso.

Curiosidade: O nome walrus" (morsa, em inglês) vem do formato do símbolo :=, que lembra os dentes de uma morsa. 🦭