Python: Não use len()

republicado de: aprenda-python.blogspot.com.br

Não use len()

É muito comum lermos código Python que tem isso:
>>> if len(lista) == 0:
...     # faz isso pq a lista está vazia...
>>> if len(lista) > 0:
...     # faz isso pq a lista tem itens...
Para ver se uma lista está vazia, eu já vi um teste assim: if lista == []:

É normal, quando estamos aprendendo uma nova linguagem, levarmos o que já sabemos de outra, mas por favor, não faça assim! Existe uma maneira mais expressiva (chamamos pythônica) de escrever esses trechos de código:
>>> if lista:
...     # faz isso pq a lista tem itens...
>>> if not lista:
...     # faz isso pq a lista está vazia...
... 

O exemplo acima funciona porque Python avalia como True objetos preenchidos e como False os objetos vazios.

O mesmo princípio também vale para strings, dicionários, números, tuplas e tipos booleanos. Vamos usar uma string como exemplo:
>>> nome = 'Huguinho'
>>> if nome:
...     print 'O nome é %s' % nome
...
O nome é Huguinho
>>> 
>>> nome = ''
>>> if not nome:
...     print 'Anônimo'
...
Anônimo
>>> 

É claro que o len() existe para ser usado, mas somente aonde convém:
>>> lista = ['Huguinho', 'Zezinho', 'Luisinho']
>>> if lista:
...     print 'Donald tem %d sobrinhos: %s' % (len(lista), ', '.join(lista))
... else:
...     print 'Donald não tem sobrinhos'
...
Donald tem 3 sobrinhos: Huguinho, Zezinho e Luisinho
>>> 

Finalizando, use o len() mas aprecie com moderação.

[Edição] Seguindo a dica do @andrewsmedina, vou dar um final diferente a esse post.

Só use len() quando você precisar saber:
  1. Quantos caracteres tem numa string;
  2. Quantos itens estão presentes numa lista, tupla, ou set;
  3. Quantas chaves existem num dicionário;
  4. Quantos itens existem em qualquer objeto iterável.

Mas não use len() para saber se um objeto está preenchido, ok?

Comentários