Curso
Assim como na matemática, as linguagens de programação como Python têm operadores. Você pode pensar nelas como funções extremamente simples que estão na base da ciência da computação. Essas são as operações mais simples às quais um programa de computador pode ser reduzido. Eles são conhecimentos essenciais para qualquer aspirante a cientista de dados ou engenheiro de software.
Neste tutorial, você aprenderá sobre
- Os diferentes tipos de operadores: Aritmética, atribuição, comparação e lógica
- Sobrecarga do operador
- Precedência
- Associatividade
Se você quiser saber mais sobre os fundamentos da linguagem de programação Python, não deixe de conferir nosso curso gratuito Intro to Python for Data Science.
Operadores aritméticos
É provável que você já esteja familiarizado com elas, já que vêm da matemática básica.
Os operadores aritméticos são: adição (+), subtração (-), multiplicação (*), divisão (/), expoente (**), divisão de piso (//) e módulo (%). As quatro primeiras são bastante simples: adição, subtração, multiplicação e divisão, e você provavelmente já está familiarizado com elas.
# Addition
print(5 + 2)
# Subtraction
print(5 - 2)
# Multiplication
print(5 * 2)
# Division
print(5 / 2)
7
3
10
2.5
Os outros três são um pouco mais complicados. O operador de expoente significa "elevado à potência de". Por exemplo, 2 ** 3 significa que 2 é multiplicado por ele mesmo 3 vezes, portanto 2 ** 3 é igual a 2 * 2 * 2, que é igual a 8.
A divisão por piso é igual à divisão normal, exceto pelo fato de que o resultado é sempre arredondado para o final. No exemplo abaixo, 5 é dividido por 2, resultando em 2,5. Mas como se trata da divisão do piso, 2,5 é arredondado para 2.
Por fim, o módulo é o restante após a divisão. No caso de 5%2, o número 2 só cabe duas vezes em 5, o que significa que o restante é 1.
# Exponent
print(5 ** 2)
# This is the same as 5 * 5
# Floor Division
print(5 // 2)
# Modulus
print(5 % 2)
25
2
1
Em Python, o operador de adição também pode ser usado para concatenar cadeias de caracteres. Isso significa que eles serão reunidos em uma única string, por exemplo:
firstName = "Théo"
introduction = "Hi, my name is " + firstName + "."
print(introduction)
Hi, my name is Théo.
Operadores de atribuição
Se você tem alguma experiência em programação, certamente já usou operadores de atribuição antes. Eles atribuem um determinado valor a uma variável. O mais usado é o =. Para usá-lo, basta digitar o nome da variável à qual você deseja atribuir um novo valor, o endereço = e o valor que deseja atribuir. Por exemplo, se quiser atribuir o valor 100 à variável balance, você pode fazer o seguinte:
balance = 100
print(balance)
100
Se quiser incrementar o valor de balance com 10, você pode usar balance += 10. Isso é equivalente a balance = balance + 10, mas é muito mais curto.
balance += 10
print(balance)
110
O mesmo se aplica a -=, balance -= 10 é o mesmo que balance = balance - 10:
print(balance)
balance -= 10
print(balance)
110
100
Os outros operadores de atribuição funcionam exatamente da mesma forma. São elas:
*=/=**=//=%=
Operadores de comparação
Você pode usar operadores de comparação para, como você adivinhou, comparar os valores das variáveis. Eles sempre retornarão um valor booleano, que é True ou False. Há seis deles:
- Equal:
== - Não é igual:
!= - Maior que:
> - Menos de:
< - Maior que ou igual:
>= - Menor ou igual:
<=
Aqui estão alguns exemplos de comparações:
a = 3
b = 5
print(a == b) # Equal
print(a != b) # Not equal
print(a > b) # Greater than
print(a < b) # Less than
print(a >= b) # Greater than or equal to
print(a <= b) # Less than or equal to
False
True
False
True
False
True
== e != também podem ser usados para comparar cadeias de caracteres em vez de números. Os outros operadores não são compatíveis com cadeias de caracteres, pois uma cadeia de caracteres não pode ser realmente maior que outra cadeia de caracteres.
print("Hello" == "World")
print("Python" != "R")
False
True
Operadores lógicos
Talvez você já esteja familiarizado com eles! Na lógica, eles são chamados de conectivos lógicos. Eles também são amplamente usados na linguagem humana. São eles: and, or e not.
and só retornará True se ambos os operandos (os dois objetos booleanos que você está comparando) forem True. Por exemplo:
print(True and True)
print(True and False)
print(False and False)
True
False
False
Para entender o comportamento desse operador lógico, você pode usar uma tabela-verdade:
| a | b | a e b |
|---|---|---|
| Verdadeiro | Verdadeiro | Verdadeiro |
| Verdadeiro | Falso | Falso |
| Falso | Verdadeiro | Falso |
| Falso | Falso | Falso |
or é True, sempre que qualquer operando (um ou mais) for True.
print(True and True)
print(True and False)
True
False
| a | b | a ou b |
|---|---|---|
| Verdadeiro | Verdadeiro | Verdadeiro |
| Verdadeiro | Falso | Verdadeiro |
| Falso | Verdadeiro | Verdadeiro |
| Falso | Falso | Falso |
Observe que eles também funcionam com mais de dois operandos, por exemplo:
print(True and True and True and True)
print(True and True and True and False)
print(False or False or False or False)
print(False or False or False or True)
True
False
False
True
not retornará o oposto de seu operando, portanto, True se False for fornecido e vice-versa.
print(not True)
False
| a | não um |
|---|---|
| Verdadeiro | Falso |
| Falso | Verdadeiro |
Sobrecarga do operador
Lembre-se de que, anteriormente, você viu como o + pode ser usado para somar números, mas que ele também pode ser usado para concatenar ou combinar cadeias de caracteres. Portanto, o + funciona de forma diferente, dependendo do tipo de objeto em que você o utiliza. Mas esse nem sempre será o caso. Às vezes, o operador com o qual você está trabalhando simplesmente não é compatível com o tipo de objeto no qual você deseja usá-lo.
Veja um exemplo. Digamos que você tenha dois objetos Dog, ozzy e filou. Eles pertencem à classe Dog abaixo. Você pode pensar na classe como um projeto de como os objetos devem ser e como devem se comportar. Nesse caso, os objetos Dog têm um nome, idade e altura. Depois que a classe é definida, você pode instanciar objetos. Um deles é o Ozzy, com 3 anos de idade e 30 centímetros de altura. O outro é Filou, ele tem 5 anos e 65 centímetros de altura.
Este exemplo usa o conceito de programação orientada a objetos. Se quiser saber mais sobre isso, não deixe de ler nosso tutorial sobre Programação orientada a objetos em Python
Digamos que você queira comparar os dois cães com o sinal de maior que: >. Isso não funcionará. Você receberá um erro dizendo '>' not supported between instances of 'Dog' and 'Dog'. Isso significa que o site > não sabe como comparar objetos da classe Dog.
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-96-428069ab24cc> in <module>()
9 filou = Dog("Filou", 5, 65)
10
---> 11 print(filou > ozzy)
TypeError: '>' not supported between instances of 'Dog' and 'Dog'
Felizmente, com a sobrecarga de operador, você pode definir o comportamento do operador para quando ele for chamado nos objetos Dog. Nesse caso, um método chamado __gt__, que significa "maior que", deve ser definido, recebendo dois argumentos. Como queremos comparar nossos cães com base em sua altura, o método retorna self.height > other.height.
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def __gt__(self,other):
return self.height > other.height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
print(ozzy > filou)
True
False
Precedência
Quando você está combinando vários operadores, as coisas podem ficar confusas. Dê uma olhada no exemplo abaixo:
a = 2
b = 3
c = 9
a ** b > 5 and c - a // b >= 9 or b ** 2 == c
True
Como você sabe qual deles será executado primeiro? Como você deve ler uma linha de código com muitos desses símbolos? Ele é executado da esquerda para a direita ou há alguma ordem específica?
É aqui que entra a precedência. Os operadores Python são executados em uma ordem muito específica, e alguns têm prioridade sobre outros.
Na tabela a seguir, você pode ver a precedência dos operadores, na ordem de cima para baixo. Essas regras são as mesmas da matemática, em que determinados cálculos em uma fórmula precisam ser realizados antes de outros.
| Precedência | Operador | Descrição |
|---|---|---|
| 1 | ** | expoente |
| 2 | *, /, %, // | multiplicar, dividir, módulo, divisão por piso |
| 3 | +, - | plus, minus |
| 4 | >, <, >=, <= | comparison |
| 5 | ==, != | igualdade |
| 6 | = %= /= //= -= += *= **= | atribuição |
| 7 | e, ou, não | lógico |
Associatividade
Você viu que a precedência é importante! Mas e as que estão no mesmo nível de precedência, como multiplicação e divisão? Eles são executados ao mesmo tempo? No. *, \, % e \\ são executados da esquerda para a direita, enquanto ** é executado da direita para a esquerda. Isso é chamado de associatividade.
Dê uma olhada no exemplo a seguir. Nesse caso, os operadores serão executados da esquerda para a direita, e o resultado será 3.
print(5 * 2 // 3)
3
Ao adicionar parênteses, no entanto, você pode alterar a ordem em que os operadores são executados. Isso é associatividade, que funciona da mesma forma que a associatividade em matemática. O que estiver entre parênteses será calculado primeiro. Nesse caso, a divisão do piso será realizada primeiro, seguida pela multiplicação.
print(5 * (2 // 3))
Conclusão
Agora você sabe o que são operadores, como deve usá-los e como eles funcionam. Você também aprendeu sobre sobrecarga, precedência e associatividade. Você está no caminho certo para se tornar um mestre em Python! Se você quiser aprender ainda mais, não hesite em conferir nosso curso Python Intermediário para Ciência de Dados.