Dans [Python][1], la méthode suivante est-elle la seule façon d'obtenir le nombre d'éléments ?
arr.__len__()
Si oui, pourquoi cette syntaxe étrange ?
[1] : http://en.wikipedia.org/wiki/Python_%28programming_language%29
my_list = [1,2,3,4,5]
len(my_list)
# 5
Le même principe s'applique aux tuples :
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Et les chaînes de caractères, qui ne sont en fait que des tableaux de caractères :
my_string = 'hello world'
len(my_string)
# 11
Cela a été [intentionnellement fait de cette façon] (http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list.htm) pour que les listes, les tuples et autres types de conteneurs n'aient pas besoin d'implémenter explicitement une méthode publique .length()
, au lieu de cela vous pouvez simplement vérifier le len()
de tout ce qui implémente la méthode 'magique' ; __len__()
.
Bien sûr, cela peut sembler redondant, mais les implémentations de la vérification de la longueur peuvent varier considérablement, même au sein d'un même langage. Il n'est pas rare de voir un type de collection utiliser une méthode .length()
alors qu'un autre type utilise une propriété .length
, et qu'un autre encore utilise .count()
. Le fait d'avoir un mot-clé au niveau du langage unifie le point d'entrée de tous ces types. Ainsi, même les objets que vous ne considérez pas comme des listes d'éléments peuvent être contrôlés en termes de longueur. Cela inclut les chaînes de caractères, les files d'attente, les arbres, etc.
La nature fonctionnelle de len()
se prête également bien aux styles de programmation fonctionnelle.
lengths = map(len, list_of_containers)
La meilleure façon d'obtenir la longueur d'un objet python est de le passer comme argument à la fonction len
. En interne, python essaiera alors d'appeler la méthode spéciale __len__
de l'objet qui a été passé.
Utilisez simplement len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1