any() e all(): Verificações Lógicas Rápidas
Verificar múltiplas condições é algo extremamente comum em Python.
Seja para validar dados, aplicar regras ou filtrar valores, geralmente surgem perguntas simples:
- Algum item atende a essa condição?
- Todos os itens atendem a essa condição?
É exatamente para isso que any() e all() existem.
Entendendo o any()
any() retorna True se pelo menos um elemento do iterável for verdadeiro.
values = [0, "", None, 5]
any(values)
# True
Assim que um valor verdadeiro é encontrado, a avaliação é interrompida.
Entendendo o all()
all() retorna True apenas se todos os elementos do iterável forem verdadeiros.
values = [1, 2, 3]
all(values)
# True
Se um único valor falso aparecer, o resultado será False.
Um padrão comum sem any() / all()
numbers = [2, 4, 6, 8]
is_valid = True
for n in numbers:
if n % 2 != 0:
is_valid = False
break
Funciona, mas é mais verboso e tende a crescer com lógica desnecessária.
A mesma lógica com all()
numbers = [2, 4, 6, 8]
is_valid = all(n % 2 == 0 for n in numbers)
A intenção fica imediatamente clara: todos os números devem ser pares.
Combinando com condições
names = ["Alice", "Bob", ""]
has_empty_name = any(name == "" for name in names)
A leitura se aproxima bastante de linguagem natural.
Um erro comum a evitar
Cuidado ao misturar any() ou all() com expressões complexas:
# Difícil de ler — evite
is_valid = all(
(x := compute(x)) > 0 and x < 10
for x in values
)
Se a lógica ficar densa, dividir em etapas costuma ser mais legível.
Conclusão
Na prática, any() e all() ajudam a escrever código focado em intenção, não em mecânica.
Sempre que você estiver usando loops apenas para validar condições, essas funções quase sempre são a melhor opção.