Ist in Python die folgende Möglichkeit, die Anzahl der Elemente zu ermitteln?
arr.__len__()
Wenn ja, warum die seltsame Syntax?
my_list = [1,2,3,4,5]
len(my_list)
# 5
Das gleiche gilt für Tupel:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Und Strings, die eigentlich nur Anordnungen von Zeichen sind:
my_string = 'hello world'
len(my_string)
# 11
Dies wurde absichtlich so gemacht, dass Listen, Tupel und andere Containertypen oder Iterables nicht alle explizit eine öffentliche .length()
Methode implementieren mussten. Stattdessen können Sie einfach len()
alles überprüfen, was die 'magische' __len__()
Methode implementiert .
Sicher, dies mag überflüssig erscheinen, aber Implementierungen zur Längenprüfung können selbst innerhalb derselben Sprache erheblich variieren. Es ist nicht ungewöhnlich, dass ein Sammlungstyp eine .length()
Methode verwendet, während ein anderer Typ eine .length
Eigenschaft verwendet, während ein anderer verwendet .count()
. Ein Schlüsselwort auf Sprachebene vereinheitlicht den Einstiegspunkt für alle diese Typen. Selbst Objekte, die Sie möglicherweise nicht als Listen von Elementen betrachten, können dennoch auf ihre Länge überprüft werden. Dies umfasst Zeichenfolgen, Warteschlangen, Bäume usw.
Die funktionale Natur von len()
eignet sich auch gut für funktionale Programmierstile.
lengths = map(len, list_of_containers)
Die Art und Weise, wie Sie eine Länge von allem nehmen, für das dies sinnvoll ist (eine Liste, ein Wörterbuch, ein Tupel, eine Zeichenfolge, ...), besteht darin, es aufzurufen
len
.Der Grund für die „seltsame“ Syntax ist , dass intern Python übersetzt
len(object)
inobject.__len__()
. Dies gilt für jedes Objekt. Wenn Sie also eine Klasse definieren und es sinnvoll ist, dass sie eine Länge hat, definieren Sie einfach eine__len__()
Methode, und dann können Sielen
diese Instanzen aufrufen .quelle
Python verwendet die Ententypisierung : Es ist ihm egal, was ein Objekt ist , solange es über die entsprechende Schnittstelle für die jeweilige Situation verfügt. Wenn Sie die integrierte Funktion len () für ein Objekt aufrufen, rufen Sie tatsächlich dessen interne __len__- Methode auf. Ein benutzerdefiniertes Objekt kann diese Schnittstelle implementieren und len () gibt die Antwort zurück, auch wenn das Objekt konzeptionell keine Sequenz ist.
Eine vollständige Liste der Schnittstellen finden Sie hier: http://docs.python.org/reference/datamodel.html#basic-customization
quelle
Der bevorzugte Weg, um die Länge eines Python-Objekts zu ermitteln, besteht darin, es als Argument an die
len
Funktion zu übergeben. Intern versucht Python dann, die spezielle__len__
Methode des übergebenen Objekts aufzurufen .quelle
Verwenden Sie einfach
len(arr)
:quelle
Sie können
len(arr)
wie in den vorherigen Antworten vorgeschlagen verwenden, um die Länge des Arrays zu ermitteln. Wenn Sie die Abmessungen eines 2D-Arrays möchten, können Sie diearr.shape
Höhe und Breite der Rückgabe verwendenquelle
len(list_name)
Die Funktion verwendet die Liste als Parameter und ruft die__len__()
Funktion der Liste auf .quelle
Python schlägt vor, dass Benutzer
len()
anstelle von__len__()
Konsistenz verwenden, genau wie andere Leute sagten. Es gibt jedoch noch einige andere Vorteile:Für einige , wie in gebauten Typen
list
,str
,bytearray
und so weiter, die Cython Umsetzunglen()
erfolgt eine Verknüpfung. Es gibt direkt dieob_size
in einer C-Struktur zurück, die schneller als das Aufrufen ist__len__()
.Wenn Sie an solchen Details interessiert sind, können Sie das Buch "Fluent Python" von Luciano Ramalho lesen. Es enthält viele interessante Details, die Ihnen helfen können, Python besser zu verstehen.
quelle