Curso
A função range() é super popular e muito usada em Python, principalmente quando você tá trabalhando com loops for e, às vezes, também com loops while. Vale a pena conhecer e dominar a função range(), pois isso abrirá muitas portas: range() é usada em tudo, desde controlar o fluxo de um programa até percorrer conjuntos de dados que você está usando para análise de dados.
Se você está começando a usar Python e quer saber mais, faça o curso Introdução à Ciência de Dados em Python do DataCamp.
O que é a função range() em Python?
A função range() retorna uma sequência de números e é imutável, ou seja, seu valor é fixo. A função range() aceita um ou, no máximo, três argumentos, ou seja, o start e um valor stop, junto com um tamanho step.
range() foi introduzido no Python3. No Python2, usava-se uma função parecida, xrange(), que funcionava de um jeito um pouco diferente. Entre outras coisas, xrange() retornava um objeto gerador e consumia menos memória, enquanto range(), por outro lado, retornava uma lista ou sequência de números.
Parte do motivo pelo qual a função range() é útil é porque ela só guarda os valores start, stop e step, então ela usa menos memória em comparação com uma lista ou tupla.
Sintaxe da função range() do Python
A função range() pode ser representada de três maneiras diferentes, ou você pode pensar nelas como três parâmetros range():
range(stop_value): Por padrão, o ponto de partida aqui é zero.
range(start_value, stop_value): Isso gera a sequência com base no valor inicial e final.
range(start_value, stop_value, step_size): Ele gera a sequência aumentando o valor inicial usando o tamanho do passo até chegar ao valor final.

Também podemos verificar o tipo da função range() envolvendo range() em type().
my_range = range(100)
print(type(my_range))
# Expected output: <class 'range'>
Exemplos da função range() em Python
Vamos agora dar uma olhada em alguns exemplos para que você possa praticar e dominar o uso de range().
Usando range() do Python para imprimir uma sequência de números
Vamos começar com um exemplo simples de impressão de uma sequência de dez números, que vai cobrir seu primeiro parâmetro range(). Para fazer isso, você só precisa passar o valor stop. Como o Python usa indexação baseada em zero, a sequência vai começar em zero e parar no número especificado, ou seja, n-1, onde n é o número especificado na função range().
my_range = range(10)
for num in my_range:
print(num)
# Expected output:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
Como esperado, a célula acima retorna uma sequência de números começando com 0 e terminando em 9.
Usando range() do Python com list()
Você também pode usar a função intervalo como um argumento para uma lista. Nesse caso, o resultado seria uma lista de números com comprimento igual ao valor de parada, como mostrado abaixo:
my_range = list(range(10))
print(my_range)
range_length = len(my_range)
print(range_length)
# Expected output:
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 10
Usando start, stop e step no range() do Python
Agora, vamos ver outra maneira de usar a função range(). Aqui você vai colocar o valor de start e o valor de stop.
my_range = range(5, 10)
print(my_range)
# Expected output: range(5, 10)
for num in range(5,10):
print(num)
# Expected output:
# 5
# 6
# 7
# 8
# 9
Da mesma forma, você pode usar a função range() para imprimir os valores inteiros negativos também.
for num in range(-5,0):
print(num)
# Expected output:
# -5
# -4
# -3
# -2
# -1
Agora vamos adicionar o terceiro parâmetro, ou seja, o tamanho do bloco de memória ( step ) à função de alocação de memória ( range() ) e ver como isso afeta o resultado. Você vai colocar o ponto start como 50, o valor stop como 1000 e o tamanho step como 100. A função range abaixo deve gerar uma sequência começando em 50 e aumentando em incrementos de 100.
my_range = range(50,1000,100)
print(my_range)
# Expected output: range(50, 1000, 100)
Você vai ver que ele vai imprimir todos os números pares.
for num in range(50,1000,100):
print(num)
# Expected output:
# 50
# 150
# 250
# 350
# 450
# 550
# 650
# 750
# 850
# 950
Uma observação sobre range() e valores float em Python
É importante notar que a função range() só funciona quando o valor especificado é um número inteiro ou um número inteiro. Não suporta o tipo de dados float e o tipo de dados string. Mas dá pra passar valores inteiros positivos e negativos pra ele. Vamos ver o que rola quando você tenta passar valores flutuantes.
for num in range(0.2,2.4):
print(num)
# Expected output:
# TypeError: 'float' object cannot be interpreted as an integer
Você já deve ter coçado a cabeça pelo menos uma vez ao tentar inverter uma lista vinculada de valores inteiros na linguagem C. Mas, em Python, dá pra fazer isso com a função range(), só trocando start e stop e adicionando um tamanho de passo negativo. Não é tão simples assim? Vamos descobrir!
for num in range(100,10,-10):
print(num)
# Expected output:
# 100
# 90
# 80
# 70
# 60
# 50
# 40
# 30
# 20
Usando range() para calcular a soma de uma lista
Digamos que você tenha uma lista de valores inteiros e queira calcular a soma da lista, mas usando a função range(). Vamos descobrir se isso é possível.
Primeiro, você vai definir a lista que tem valores inteiros. Depois, inicialize um contador onde você vai guardar o valor toda vez que iterar sobre a lista e também somar o valor atual da lista com o valor antigo da contagem.
Para acessar os elementos da lista, você vai usar a função range() no objeto length da lista e, em seguida, acessar os elementos da lista ignorando o índice i, que vai começar do zero e parar no comprimento da lista.
list1 = [2,4,6,8,10,12,14,16,18,20]
count = 0
for i in range(len(list1)):
count = count + list1[i]
print(count)
print('sum of the list:', count)
# Expected output:
# 2
# 6
# 12
# 20
# 30
# 42
# 56
# 72
# 90
# 110
# sum of the list: 110
Usando range() com itertools para juntar uma lista
Você também pode juntar duas ou mais funções range() usando a classe chain do pacote itertools. E não só a função range, você pode até juntar listas, tuplas, etc. Lembre-se de que o método chain retorna um objeto gerador e, para acessar os elementos desse objeto gerador, você pode usar um loop for ou usar list e passar o objeto gerador como um argumento para ele.
from itertools import chain
a1 = range(10,0,-2)
a2 = range(30,20,-2)
a3 = range(50,40,-2)
final = chain(a1,a2,a3)
print(final) #generator object
# Expected output: <itertools.chain object at 0xae6330>
print(list(final))
# Expected output:
# [10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]
Python range() e comparações de igualdade
Você pode usar comparações de igualdade entre funções d range(). Se duas funções range() representam a mesma sequência de valores, elas são consideradas iguais. Dito isso, duas funções iguais range() não precisam ter os mesmos atributos start, stop e step. Vamos entender isso com um exemplo.
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 3) = [0, 3, 6, 9]
print(range(0, 10, 3) == range(0, 11, 3))
# Expected output: True
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 2) = [0, 2, 4, 6, 8, 10]
print(range(0, 10, 3) == range(0, 11, 2))
# Expected output: False
Como você pode ver nos resultados acima, mesmo que os parâmetros da função range() sejam diferentes, eles ainda são considerados iguais, já que a sequência das duas funções é a mesma. No segundo exemplo, mudar o tamanho step faz com que a comparação seja False.
Conclusão
Parabéns por ter concluído o tutorial. Você pode querer mexer um pouco na função range() e achar uma maneira de personalizá-la para aceitar outros tipos de dados além de inteiros.
Se, depois de ler, você achar que pode se beneficiar com a prática das funções Python, confira nossos tutoriais Funções Python e Guia para iniciantes em Python para loops. Para uma trilha de aprendizagem estruturada, dê uma olhada no nosso curso Writing Efficient Python Code DataCamp, que não só aborda a função range() em detalhes, mas também ajuda com conceitos de codificação mais gerais para ajudá-lo a escrever código realmente eficiente sem muita sobrecarga.