Python Iluminado

Operadores

Operadores são símbolos especiais capazes de executar computação aritmética ou lógica.

Os operadores são usados para realizar operações em variáveis e valores.

Existem diversos tipos de operadores em Python:

  • Operadores Aritméticos
  • Operadores de Atribuição
  • Operadores de Comparação
  • Operadores Lógicos
  • Operadores de Identidade
  • Operadores de Membros
  • Operadores Bitwise

Vejamos então como eles funcionam em mais detalhes.

Operadores Aritméticos

Operadores aritméticos são usados com valores numéricos para realizar operações matemáticas comuns:

OperadorDescriçãoExemplo
+Adiciona dois operandos2+5
-Subtrai o operando da direita pelo da esquerda7-2
*Multiplica dois operandos3*3
/Divide o operando da esquerda pelo da direita3/2
%Módulo, resto da divisão do operando da esquerda pelo da direita10%3
//Divisão arredondada, esta divisão retorna um número inteiro3//2
**Expoente, operando a esquerda elevado à potência do operando a direita2**32

Por exemplo:

x = 10
y = 6
z = 6.0
print("x + y = ", x+y) # Nos resulta 16
print("x - y = ", x-y) # Nos resulta 4
print("x * y = ", x*y) # Nos resulta 60
print("x / y = ", x/y) # Nos resulta 1.6666666666666667
print("x / z = ", x/z) # Nos resulta 1.6666666666666667
print("x // y = ", x//y) # Nos resulta 1
print("x ** y = ", x**y) # Nos resulta 1000000

Observe que definimos a variável z com o valor 6.0, um número ponto flutuante, de forma que Python possa nos trazer um resultado ponto flutuante no momento de fazermos a divisão do valor de x por z.

Operadores de Atribuição

Operadores de atribuição são usados para atribuir valores a variáveis:

OperadorExemplo 1Exemplo 2
=x = 3x = 3
+=x += 3x = x + 3
-=x -= 3x = x - 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3x = x % 3
//=x //= 3x = x // 3
**=x **= 3x = x ** 3
&=x &= 3x = x & 3
|=x |= 3x = x | 3
^=x ^= 3x = x ^ 3
>>=x >>= 3x = x >> 3
<<=x <<= 3x = x << 3

Vejamos um simples exemplo:

a = 1
a += 3
print(a) # 4

Operadores de Comparação

Operadores de comparação são usados para comparar valores. Retornarão True ou False de acordo com a condição.

OperadorDescriçãoExemplo
>Maior que - True se o operando a esquerda for maior que o da direitax > y
<Menor que - True se o operando a esquerda for menor que o da direitax < y
==Igual - True se ambos os operandos forem iguaisx == y
!=Não Igual - True se os operandos forem diferentesx != y
>=Maior que ou Igual - True se o operando da esquerda for maior ou igual ao da direitax >= y
<=Menor que ou Igual - True se o operando da esquerda for menor ou igual ao da direitax <= y

Vejamos alguns exemplos de comparações:

x = 12
y = 3
print(x>y) # True
print(x<y) # False
print(x==y) # False
print(x!=y) # True
print(x>=y) # True
print(x<=y) # False

Operadores Lógicos

Operadores Lógicos são usados para combinar comandos condicionais.

OperadorDescriçãoExemplo
andRetorna True se ambos os comandos são verdadeirosx < y and x < 10
orRetorna True se um dos comandos é verdadeirox < y or x > 3
notReverte o resultado, retorna False se o resultado for True e vice-versanot(x > 10)

Vamos considerar então alguns exemplos com operadores lógicos:

n1, n2, n3 = 3, 6, 7
print(n1 < n2 and n1 < n3) # True
print(n1 == n2 or n3 == n2) # False
print(not True) # False

Operadores de Identidade

Operadores de identidade são usados para comparar os objetos, não se são iguais, mas se eles forem realmente o mesmo objeto, com o mesmo local de memória.

is e is not são operadores de identidade em Python, eles são usados para checar se dois valores (ou variáveis) estão localizados na mesma área de memória, duas variáveis iguais não significam que são idênticas!

OperadorDescrição
isTrue se os operandos são idênticos (referem ao mesmo objeto)
is notTrue se os operandos não são idênticos (não referem ao mesmo objeto)

Exemplo com números:

x = 1
y = 1
print(x is y) # True
print(x is not y) # False

Exemplo com strings:

a = "cachorro"
b = "cachorro"
print(a is b) # True
print(a is not b) # False

Exemplo com listas:

z = [1,2,3]
k = [1,2,3]
print(z is k) # False
print(z is not k) # True

Perceba aqui que x e y são inteiros do mesmo valor, então eles são iguais e idênticos, o mesmo vale para a e b (strings). Porém o mesmo não ocorre com z e k, que são iguais, porem não idênticos, isso porque o interpretador localiza eles separadamente em memória, mesmo eles sendo iguais.

Operadores de Membros

Operadores de membros são usados para testar se uma sequência é apresentada em um objeto.

OperadorDescriçãoExemplo
inRetorna True se o valor/variável é encontrado na sequência"c" in "cachorro"
not inRetorna True se o valor/variável não está presenta na sequência1 not in [1,2,3]

Exemplo básico:

a = [1,2,3]
b = "Guilherme"
print(1 in a) # Retorna True, pois 1 se encontra na lista a
print("o" in b) # Retorna False, pois o não se encontra na string b

Operadores Bitwise

Os operadores Bitwise atuam nos operandos como se eles fossem strings ou dígitos binários, eles executam operações bit por bit, por isso levam o nome Bitwise.

Considere o valor 2 que é representado por 10 em binário e 7 que é representado por 111.

Vamos utilizar a função bin() que nos retorna uma string binária:

x = 10
y = 4
print(bin(x)) # 0b1010
print(bin(y)) # 0b100

Adaptando-os, temos (x = 0000 1010) em binário e (y = 0000 0100) em binário, vamos aos operadores:

OperadorDescriçãoExemplo
&Bitwise ANDx & y = 0 (0000 0000)
|Bitwise ORx | y = 14 (0000 1110)
~Bitwise NOT~x = -11 (1111 0101)
^Bitwise XORx ^ y = 14 (0000 1110)
>>Bitwise right shiftx >> 2 = 2 (0000 0010)
<<Bitwise left shiftx << 2 = 40 (0010 1000)

Precedência de Operadores

Vamos agora considerar a seguinte expressão:

print(3 + 4 * 5) # 23

Há ambigüidade nesta expressão. O Python deve realizar a adição 3 + 4 primeiro e depois multiplicar a soma por 5? Ou a multiplicação de 4 * 5 deve ser realizada primeiro?

Uma vez que nosso resultado é 23, significa que Python optou por multiplicar primeiro e depois realizar a adição, este é o procedimento padrão algébrico, encontrado universalmente em todas as linguagens de programação.

Todos os operadores suportados por Python têm precedência. Em uma expressão, todos os operadores de maior precedência são executados primeiro. Depois que esses resultados são obtidos, os operadores da próxima precedência mais alta são executados. Então continua-se, até que a expressão seja totalmente avaliada. Quaisquer operadores de igual precedência são executados da esquerda para a direita.

A tabela a seguir apresenta a ordem de precedência dos operadores Python do menor ao maior:

OperadorDescrição
menor precedênciaorBoolean OR
andBoolean AND
notBoolean NOT
==, !=, <, <=, >, >=, is, is notComparações, Identidade
|Bitwise OR
^Bitwise XOR
&Bitwise AND
<<, >>Bit Shifts
+, -Adição, Subtração
*, /, //, %Multiplicação, Divisão, Floor Division, Modulus
+x, -x, ~xUnário Positivo, Unário Negativo, Bitwise Negation
maior precedência**Exponenciação

Os operadores na parte superior da tabela têm a precedência mais baixa e aqueles na parte inferior da tabela têm a mais alta. Quaisquer operadores na mesma linha da tabela têm precedência igual.

A precedência do operador pode ser substituída usando parênteses. As expressões entre parênteses são sempre executadas primeiro, antes das expressões que não estão entre parênteses. Por exemplo:

print(3 + 3 * 5) # 18
print((3 + 3) * 5) # 30

Lembre sempre que os operadores tem um papel fundamental na programação e que devemos entender o seu funcionamento de maneira plena, faça experimentos e divirta-se com os cálculos!