Python Funções Embutidas

Desde a primeira aula você usa funções que não escreveu: print(), input(), type(). Elas já vêm embutidas no Python (em inglês, built-in functions): funcionam em qualquer programa, sem import nem def. Nesta aula você vai conhecer as que mais aparecem no dia a dia, para contar, somar, achar o menor e o maior, arredondar, ordenar e testar uma lista inteira de uma vez. Com elas, muitos laços que você escreveria viram uma linha só.

Você vai aprender
  • O que é uma função embutida e por que ela não precisa de import.
  • len() para contar, sum() para somar e a média com as duas juntas.
  • min() e max(), inclusive com a opção key ("o maior pelo tamanho", "o mais caro").
  • abs() e round(), e a surpresa do round(8.5).
  • sorted() para ordenar sem mexer na lista original.
  • any() e all(): "alguém?" e "todos?".
  • Os erros reais: len(5), max([]), misturar texto com número e a variável chamada sum.

A ideia: a caixa de ferramentas que vem com a casa

Quando a Ana se mudou, o apartamento já tinha, na gaveta da cozinha, uma caixa com martelo, chave de fenda e trena. Ela não precisou comprar nem fabricar nada: era só abrir a gaveta e usar. As funções embutidas são essa caixa. Você não precisa escrever um laço para contar os itens de uma lista, nem para achar a maior nota da turma: o Python já traz uma ferramenta pronta, testada e rápida para isso.

Você já conhece algumas delas, cada uma com aula própria:

FunçãoO que fazAula
print()Mostra valores na telaprint()
input()Lê o que a pessoa digitainput()
type()Diz o tipo de um valorDescobrindo o Tipo
int(), float(), str()Convertem de um tipo para outroConversão de Tipos
range()Gera uma sequência de númerosrange()

Agora vêm as novas. Os exemplos usam o modo interativo (>>>, aula O Modo Interativo), que mostra a resposta de cada linha na hora.


1. len(): quantos itens?

len vem de length, "comprimento". Ela conta quantos itens há dentro de alguma coisa: letras num texto, itens numa lista, chaves num dicionário.

$ python3
Python 3.14.4 (main, Aug 20 2026, 10:41:58) [GCC 15.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> len("Ana")
3
>>> len("pão de queijo")
13
>>> len([7.5, 8.0, 6.5])
3
>>> len({"arroz": 3, "feijão": 2})
2
>>> len([])
0
len("pão de queijo")
13: as 11 letras e os 2 espaços. Num texto, tudo conta, inclusive espaço e pontuação. O ã conta como uma letra só.
len([7.5, 8.0, 6.5])
3: numa lista, conta os itens, não importa o tamanho de cada um.
len({"arroz": 3, "feijão": 2})
2: num dicionário, conta os pares chave-valor (aula Dicionários).
len([])
0: uma lista vazia tem zero itens. Não é erro.

2. sum(): a soma, e a média

sum quer dizer "soma". Ela recebe uma lista de números e devolve o total. Junto com o len(), dá a média:

>>> notas = [7.5, 8.0, 6.5, 9.0]
>>> sum(notas)
31.0
>>> sum(notas) / len(notas)
7.75
>>> sum([])
0
sum(notas)
7.5 + 8.0 + 6.5 + 9.0 = 31.0. Como as notas são float (números com casa decimal), a soma também é.
sum(notas) / len(notas)
A média: o total dividido pela quantidade. 31.0 / 4 = 7.75.
sum([])
A soma de nenhum número é 0.

Sem o sum(), você precisaria de um laço com um acumulador, como na aula for:

total = 0
for nota in notas:
    total = total + nota

O sum(notas) faz exatamente isso, numa linha.


3. min() e max(): o menor e o maior

min é "mínimo" e max é "máximo". Elas aceitam uma lista ou vários valores separados por vírgula:

>>> min(notas)
6.5
>>> max(notas)
9.0
>>> max(3, 9, 4)
9
>>> min("banana", "abacate", "caju")
'abacate'

Com textos, "menor" quer dizer "vem primeiro na ordem alfabética": 'abacate' vem antes de 'banana' e de 'caju'. (Cuidado: para o Python, as maiúsculas vêm antes das minúsculas, e as letras com acento vêm depois de todas; a aula Ordenando Listas mostra os detalhes.)

A opção key: "o maior segundo qual critério?"

Às vezes você não quer o maior valor, e sim o maior segundo um critério: o nome mais comprido, o produto mais caro. Para isso existe a opção key ("chave"). Você passa uma função, e o max() compara o resultado dela em vez do item:

>>> nomes = ["Ana", "Bruno", "Clara", "Jo"]
>>> max(nomes, key=len)
'Bruno'
>>> min(nomes, key=len)
'Jo'
key=len
"Compare pelo len de cada nome." Repare: é len sem parênteses. Você não está chamando a função, está entregando a função para o max(), que vai chamá-la em cada item: len("Ana") = 3, len("Bruno") = 5, len("Clara") = 5, len("Jo") = 2.
'Bruno'
O maior tamanho é 5, e há dois nomes com 5 letras. No empate, o max() devolve o primeiro que encontrou.
'Jo'
O menor tamanho: 2 letras.

Com uma função lambda (aula lambda), você escolhe qualquer critério. Aqui, cada produto é uma tupla (nome, preço), e o critério é a posição 1, o preço:

produtos = [("arroz", 25.9), ("café", 18.5), ("azeite", 39.9), ("sal", 3.2)]

mais_caro = max(produtos, key=lambda produto: produto[1])
mais_barato = min(produtos, key=lambda produto: produto[1])

print("Mais caro:", mais_caro)
print("Mais barato:", mais_barato)
print("Do mais barato ao mais caro:")
for nome, preco in sorted(produtos, key=lambda produto: produto[1]):
    print(f"  {nome}: R$ {preco:.2f}")
$ python3 mais_caro.py
Mais caro: ('azeite', 39.9)
Mais barato: ('sal', 3.2)
Do mais barato ao mais caro:
  sal: R$ 3.20
  café: R$ 18.50
  arroz: R$ 25.90
  azeite: R$ 39.90

O max() devolveu a tupla inteira do azeite, não só o preço: o key só muda o critério de comparação, e o resultado continua sendo um dos itens da lista. O sorted() do fim, com o mesmo key, é o assunto da seção 6.

Missão: calcule a média da turma com sum() e len() e arredonde para 1 casa com round(valor, 1) (a seção 4 explica o round). A saída deve ser Média: 7.3.

notas = [7.5, 8.0, 6.5, 9.0, 5.5]

media = 0
print("Média:", media)
notas = [7.5, 8.0, 6.5, 9.0, 5.5]

media = round(sum(notas) / len(notas), 1)
print("Média:", media)

4. abs() e round(): mexendo com números

abs(): o valor sem o sinal

abs vem de "absoluto". Ela tira o sinal de menos: devolve a distância do número até o zero. Serve, por exemplo, para saber a diferença entre dois valores sem se importar com qual é o maior.

>>> abs(-5)
5
>>> abs(-2.75)
2.75
>>> abs(3)
3

round(): arredondar

round quer dizer "arredondar". Com um número só, arredonda para inteiro. Com um segundo número, diz quantas casas decimais manter:

>>> round(3.14159, 2)
3.14
>>> round(7.456)
7
>>> round(1234.5678, -2)
1200.0
round(3.14159, 2)
Duas casas depois do ponto: 3.14.
round(7.456)
Sem o segundo número: o inteiro mais perto, 7 (e o resultado é um int).
round(1234.5678, -2)
Com casas negativas, arredonda para a esquerda do ponto: -2 é "para a centena mais próxima", 1200.0.
A surpresa do meio: round(8.5) dá 8
>>> round(7.5)
8
>>> round(8.5)
8
>>> round(2.675, 2)
2.67

Na escola, aprendemos que 8.5 arredonda para 9. O Python não faz assim. Quando o número está exatamente no meio, ele arredonda para o vizinho par: 7.5 vai para 8 (par) e 8.5 também vai para 8 (par). Esse jeito se chama "arredondamento do banqueiro": numa lista grande de valores, os arredondamentos para cima e para baixo se compensam, e a soma não fica "puxada" para cima.

O round(2.675, 2) dar 2.67 é outra história: o número 2.675 não pode ser guardado exatamente no computador, e o que fica guardado é um pouquinho menor que 2.675. A aula Números conta por que isso acontece com os float.

Para mostrar um preço com duas casas, use a formatação da f-string, f"{preco:.2f}" (aula f-strings); o round() é para quando você precisa do número arredondado para fazer contas.


5. any() e all(): "alguém?" e "todos?"

Duas perguntas aparecem o tempo todo: "algum aluno tirou menos de 7?" e "todos passaram?". As funções any ("algum") e all ("todos") respondem com True ou False (aula Booleanos):

>>> any([False, False, True])
True
>>> all([True, True, False])
False
any([…])
True se pelo menos um item for verdadeiro. Basta um.
all([…])
True só se todos os itens forem verdadeiros. Basta um falso para dar False.

Na prática, você monta a lista de True/False com uma list comprehension (aula List Comprehension), fazendo a mesma pergunta para cada item:

>>> notas
[7.5, 8.0, 6.5, 9.0]
>>> any([nota < 7 for nota in notas])
True
>>> all([nota >= 6 for nota in notas])
True

A primeira pergunta é "alguma nota abaixo de 7?": sim, o 6.5. A segunda é "todas as notas são 6 ou mais?": sim. E com uma lista vazia?

>>> any([])
False
>>> all([])
True

Parece estranho, mas faz sentido: numa sala vazia, "algum aluno reprovou?" é falso (não há ninguém), e "todos passaram?" é verdadeiro, porque ninguém deixou de passar. Lembre disso se a sua lista puder chegar vazia.


6. sorted(): uma cópia em ordem

sorted quer dizer "ordenado". Ela devolve uma lista nova, em ordem, e não mexe na original:

>>> sorted([30, 4, 12, 8])
[4, 8, 12, 30]
>>> sorted([30, 4, 12, 8], reverse=True)
[30, 12, 8, 4]
>>> sorted(nomes, key=len)
['Jo', 'Ana', 'Bruno', 'Clara']
>>> sorted("Ana")
['A', 'a', 'n']
reverse=True
"Ao contrário": do maior para o menor.
key=len
O mesmo key do max(): ordena pelo tamanho. Bruno e Clara empataram com 5 letras e ficaram na ordem em que já estavam.
sorted("Ana")
Funciona com qualquer coisa que tenha itens, até um texto, mas o resultado é sempre uma lista. O 'A' maiúsculo veio antes das minúsculas.

A diferença entre sorted(lista) e o método lista.sort() (que muda a própria lista) é o assunto da aula Ordenando Listas.


Tudo junto: o boletim da turma

notas = [7.5, 8.0, 6.5, 9.0, 5.5]

print("Quantidade de notas:", len(notas))
print("Soma:", sum(notas))
print("Média:", round(sum(notas) / len(notas), 1))
print("Menor nota:", min(notas))
print("Maior nota:", max(notas))
print("Em ordem:", sorted(notas))
print("Alguém abaixo de 6?", any([nota < 6 for nota in notas]))
print("Todos acima de 5?", all([nota > 5 for nota in notas]))
$ python3 boletim.py
Quantidade de notas: 5
Soma: 36.5
Média: 7.3
Menor nota: 5.5
Maior nota: 9.0
Em ordem: [5.5, 6.5, 7.5, 8.0, 9.0]
Alguém abaixo de 6? True
Todos acima de 5? True

Oito perguntas sobre a turma, nenhum laço escrito à mão.


Formas diferentes de fazer a mesma coisa

Achar a maior nota, de três jeitos:

maior = notas[0]
for nota in notas:
    if nota > maior:
        maior = nota
maior = sorted(notas)[-1]
maior = max(notas)
FormaQuando usar
max(notas)Sempre que você quer só o maior. Curto, claro e rápido
sorted(notas)[-1]Evite só para achar o maior: ordena a lista inteira à toa. Faz sentido quando você também precisa da lista ordenada
Laço for com ifPara aprender como funciona por dentro, ou quando a regra é complicada demais para um key

Quando dá errado

Uma variável chamada sum

A Ana somou as notas com um laço e, sem pensar, chamou o total de sum. Depois, quis usar a função sum():

notas = [7.5, 8.0, 6.5]
sum = 0
for nota in notas:
    sum = sum + nota
print("Total:", sum)

media = sum(notas) / len(notas)
print("Média:", media)
$ python3 sombra.py
Total: 22.0
Traceback (most recent call last):
  File "/home/ana/sombra.py", line 7, in <module>
    media = sum(notas) / len(notas)
            ~~~^^^^^^^
TypeError: 'float' object is not callable
Total: 22.0
A primeira parte funcionou: o programa só quebra na linha 7.
File "/home/ana/sombra.py", line 7, in <module>
O erro está na linha 7, no corpo do programa.
~~~^^^^^^^
As marcas apontam para sum(notas), a chamada que falhou.
TypeError: 'float' object is not callable
"Um objeto float não pode ser chamado." Na linha 2, sum = 0 fez o nome sum passar a apontar para um número. A função embutida continua existindo, mas ficou escondida atrás da variável. Na linha 7, sum vale 22.0, e 22.0(notas) não faz sentido: um número não é uma função.

Como consertar: nunca use o nome de uma função embutida para uma variável. Chame o total de total. O mesmo vale para list, max, min, len, input, type, str… (No editor do guia, cada Rodar começa do zero, e o problema some quando você renomeia. No modo interativo >>>, o nome fica estragado até você sair e entrar de novo, ou apagar a variável com del sum.)

Missão: rode o programa da Ana e veja o TypeError. Depois conserte, trocando o nome da variável sum por total (nas três linhas em que ela aparece como variável).

notas = [7.5, 8.0, 6.5]
sum = 0
for nota in notas:
    sum = sum + nota
print("Total:", sum)

media = sum(notas) / len(notas)
print("Média:", media)
notas = [7.5, 8.0, 6.5]
total = 0
for nota in notas:
    total = total + nota
print("Total:", total)

media = sum(notas) / len(notas)
print("Média:", media)
len() de um número
>>> len(5)
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    len(5)
    ~~~^^^
TypeError: object of type 'int' has no len()

"Um objeto do tipo int não tem len()." Um número não é uma coleção de itens; não há o que contar. (No modo interativo, o "arquivo" se chama <python-input-0>: é a primeira linha que você digitou.) Se você queria a quantidade de algarismos, converta para texto antes: len(str(5)).

min() ou max() de uma lista vazia
>>> max([])
Traceback (most recent call last):
  File "<python-input-2>", line 1, in <module>
    max([])
    ~~~^^^^
ValueError: max() iterable argument is empty
>>> max([], default=0)
0

"O argumento de max() está vazio." O sum([]) e o len([]) sabem responder (0), mas qual seria o maior item de uma lista sem itens? O Python prefere avisar a inventar uma resposta. (Iterable, "iterável", é qualquer coisa que dá para percorrer com for.) Como consertar: confira se a lista tem itens antes (if notas:), ou diga o que devolver nesse caso com a opção default ("padrão").

Misturar textos e números
>>> sum(["pão", "leite"])
Traceback (most recent call last):
  File "<python-input-1>", line 1, in <module>
    sum(["pão", "leite"])
    ~~~^^^^^^^^^^^^^^^^^^
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> max(3, "10")
Traceback (most recent call last):
  File "<python-input-4>", line 1, in <module>
    max(3, "10")
    ~~~^^^^^^^^^
TypeError: '>' not supported between instances of 'str' and 'int'

No primeiro, o sum() começa a conta do zero (um int) e tenta fazer 0 + "pão": "tipos não suportados para +: 'int' e 'str'". O sum() é só para números. No segundo, o max() precisa saber se "10" é maior que 3, e o Python não compara texto com número: "> não é suportado entre 'str' e 'int'". Isso acontece muito com o que vem do input(), que é sempre texto. Como consertar: converta antes, com int() ou float() (aula Conversão de Tipos).


Referência rápida

FunçãoO que devolveExemploResultado
len(x)Quantos itens x temlen("Ana")3
sum(lista)A soma dos númerossum([7.5, 8.0])15.5
min(…) / max(…)O menor / o maior (de uma lista ou de vários valores)max(3, 9, 4)9
max(…, key=f)O maior segundo o critério fmax(["Ana", "Jo"], key=len)'Ana'
max(…, default=v)O maior, ou v se a lista estiver vaziamax([], default=0)0
abs(n)O número sem o sinalabs(-2.75)2.75
round(n)O inteiro mais próximo (no meio, o par)round(8.5)8
round(n, casas)Arredondado com tantas casas decimaisround(3.14159, 2)3.14
sorted(x)Uma lista nova, em ordem (aceita reverse e key)sorted([30, 4, 12])[4, 12, 30]
any(lista)True se algum item for verdadeiroany([False, True])True
all(lista)True se todos forem verdadeirosall([True, False])False

O Python tem muitas outras funções embutidas: enumerate() e zip() (aula enumerate() e zip()), map() e filter() (aula map() e filter()) e dezenas de outras. A lista completa, para consulta, está em Referência: Funções Embutidas.

SintomaCausa provável
TypeError: 'float' object is not callable (ou 'int', 'list'…)Uma variável com o nome de uma função embutida (sum = 0, list = […])
TypeError: object of type 'int' has no len()len() de um número
ValueError: max() iterable argument is emptymax()/min() de uma lista vazia: use default=
TypeError: unsupported operand type(s) for +: 'int' and 'str' no sum()A lista tem textos
TypeError: '>' not supported between instances of 'str' and 'int'max()/min()/sorted() com texto e número misturados
round(8.5) deu 8Não é erro: no meio, o Python arredonda para o par

Exercícios

1. Quantas letras?

Quanto vale len("feijão")?

len("feijão") ==

2. A média

Complete para calcular a média da lista precos:

media = (precos) / (precos)

3. O nome mais comprido

Complete para achar o nome com mais letras:

max(nomes, )

4. Quanto vale round(8.5) no Python?

5. A lista notas está vazia. Qual destas linhas dá erro?

6. O que any([nota < 5 for nota in notas]) responde?

Missão final: o item de nome mais comprido

Missão: a Ana vai escrever a lista de compras num papelzinho estreito e quer saber qual item tem o nome mais comprido. Use max() com key para mostrar Mais comprido: macarrão.

itens = ["arroz", "sal", "macarrão", "feijão", "café"]

mais_comprido = itens[0]
print("Mais comprido:", mais_comprido)
itens = ["arroz", "sal", "macarrão", "feijão", "café"]

mais_comprido = max(itens, key=len)
print("Mais comprido:", mais_comprido)

Agora troque o max por min: qual item aparece? E se você tirar o key=len e deixar só max(itens)? Repare que aí a resposta é o último item em ordem alfabética.


Resumo

  • Funções embutidas já vêm com o Python: nada de import nem def.
  • len() conta itens; sum() soma números; sum(x) / len(x) é a média.
  • min() e max() acham o menor e o maior; com key=, segundo um critério (key=len, sem parênteses); com default=, não quebram com lista vazia.
  • abs() tira o sinal; round() arredonda, e no meio vai para o par (round(8.5) é 8).
  • sorted() devolve uma lista nova em ordem, sem mexer na original.
  • any() = "algum é verdadeiro?"; all() = "todos são verdadeiros?".
  • Nunca dê a uma variável o nome de uma função embutida (sum, list, max): a função fica escondida e aparece … object is not callable.