Em Python, é a seguinte a única forma de obter o número de elementos?
arr.__len__()
Se sim, porquê esta sintaxe estranha?
my_list = [1,2,3,4,5]
len(my_list)
# 5
O mesmo funciona com os tuplos:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
E cordas, que na verdade são apenas conjuntos de personagens:
my_string = 'hello world'
len(my_string)
# 11
Foi intencionalmente feito desta forma para que listas, tuples e outros tipos de containers não precisassem implementar explicitamente um método público .length()
, ao invés disso você pode apenas verificar o método len()
de qualquer coisa que implemente o método 'magic' __len__()
.
Claro, isto pode parecer redundante, mas a duração das implementações de verificação pode variar consideravelmente, mesmo dentro da mesma linguagem. Não é raro ver um tipo de coleção utilizar um método .length()
enquanto outro tipo utiliza uma propriedade .length
, enquanto outro tipo utiliza .count()
. Ter uma palavra-chave de nível de linguagem unifica o ponto de entrada para todos esses tipos. Assim, mesmo objetos que você não considere como listas de elementos ainda podem ser checados em termos de comprimento. Isto inclui cordas, filas, árvores, etc.
A natureza funcional do len()
também se presta bem a estilos funcionais de programação.
lengths = map(len, list_of_containers)
A maneira preferida de obter o comprimento de qualquer objeto python é passá-lo como um argumento para a função 'len'. Internamente, python tentará então chamar o método especial __len__
do objeto que foi passado.
Basta utilizar len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1