En Python , les éléments suivants sont-ils le seul moyen d'obtenir le nombre d'éléments?
arr.__len__()
Si oui, pourquoi l'étrange syntaxe?
my_list = [1,2,3,4,5]
len(my_list)
# 5
La même chose fonctionne pour les tuples:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Et les chaînes, qui ne sont en réalité que des tableaux de caractères:
my_string = 'hello world'
len(my_string)
# 11
Cela a été fait intentionnellement de cette façon afin que les listes, tuples et autres types de conteneurs ou itérables n'aient pas tous besoin d'implémenter explicitement une .length()
méthode publique , à la place, vous pouvez simplement vérifier len()
tout ce qui implémente la __len__()
méthode `` magique '' .
Bien sûr, cela peut sembler redondant, mais les implémentations de vérification de longueur peuvent varier considérablement, même dans le même langage. Il n'est pas rare de voir un type de collection utiliser une .length()
méthode tandis qu'un autre type utilise une .length
propriété, tandis qu'un autre encore utilise .count()
. Le fait d'avoir un mot clé au niveau de la langue unifie le point d'entrée pour tous ces types. Ainsi, même les objets que vous ne considérez pas comme des listes d'éléments peuvent toujours être vérifiés en longueur. Cela inclut les chaînes, les files d'attente, les arbres, etc.
La nature fonctionnelle de len()
se prête également bien aux styles fonctionnels de programmation.
lengths = map(len, list_of_containers)
La façon dont vous prenez une longueur de tout ce qui a du sens (une liste, un dictionnaire, un tuple, une chaîne, ...) est de l'appeler
len
.La raison de la syntaxe "étrange" est que python se traduit
len(object)
en interneobject.__len__()
. Cela s'applique à tout objet. Donc, si vous définissez une classe et qu'il est logique qu'elle ait une longueur, définissez simplement une__len__()
méthode dessus et alors on peut invoquerlen
ces instances.la source
Python utilise la dactylographie de canard : il ne se soucie pas de ce que l'objet est , tant qu'il a l'interface appropriée pour la situation. Lorsque vous appelez la fonction intégrée len () sur un objet, vous appelez en fait sa méthode interne __len__. Un objet personnalisé peut implémenter cette interface et len () retournera la réponse, même si l'objet n'est pas conceptuellement une séquence.
Pour une liste complète des interfaces, consultez ici: http://docs.python.org/reference/datamodel.html#basic-customization
la source
La meilleure façon d'obtenir la longueur d'un objet python est de le passer en argument à la
len
fonction. En interne, python tentera alors d'appeler la__len__
méthode spéciale de l'objet qui a été transmis.la source
Utilisez simplement
len(arr)
:la source
vous pouvez utiliser
len(arr)
comme suggéré dans les réponses précédentes pour obtenir la longueur du tableau. Si vous voulez les dimensions d'un tableau 2D, vous pouvez utiliser laarr.shape
hauteur et la largeur de retourla source
len(list_name)
La fonction prend list comme paramètre et appelle la__len__()
fonction list .la source
Python suggère aux utilisateurs d'utiliser
len()
au lieu de__len__()
pour plus de cohérence, tout comme d'autres gars l'ont dit. Cependant, il existe d'autres avantages:Pour certains types comme intégré dans
list
,str
,bytearray
et ainsi de suite, la mise en œuvre de Cythonlen()
prend un raccourci. Il renvoie directement leob_size
dans une structure C, ce qui est plus rapide que d'appeler__len__()
.Si vous êtes intéressé par de tels détails, vous pouvez lire le livre intitulé "Fluent Python" de Luciano Ramalho. Il contient de nombreux détails intéressants et peut vous aider à mieux comprendre Python.
la source