759 Stimmen

Ist arr.__len__() der bevorzugte Weg, um die Länge eines Arrays in Python zu erhalten?

Unter Python Ist die folgende Methode die einzige Möglichkeit, die Anzahl der Elemente zu ermitteln?

arr.__len__()

Wenn ja, warum dann die seltsame Syntax?

0 Stimmen

1257voto

Soviut Punkte 83233
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 Zeichenketten, die eigentlich nur Anordnungen von Zeichen sind:

my_string = 'hello world'
len(my_string)
# 11

Es war absichtlich auf diese Weise gemacht so dass Listen, Tupel und andere Containertypen oder Iterables nicht alle explizit eine öffentliche .length() Methode, stattdessen können Sie einfach die len() von allem, was die "Magie" implementiert __len__() Methode.

Sicher, das mag redundant erscheinen, aber die Implementierungen der Längenprüfung können erheblich variieren, sogar innerhalb derselben Sprache. Es ist nicht ungewöhnlich, dass ein Sammlungstyp eine .length() Methode, während ein anderer Typ eine .length Eigenschaft, während eine andere die .count() . Ein Schlüsselwort auf Sprachebene vereinheitlicht den Einstiegspunkt für alle diese Typen. So können auch Objekte, die Sie vielleicht nicht als Listen von Elementen betrachten, auf ihre Länge geprüft werden. Dazu gehören Zeichenketten, Warteschlangen, Bäume usw.

Der funktionelle Charakter der len() eignet sich auch gut für funktionale Programmierungsstile.

lengths = map(len, list_of_containers)

54voto

rz. Punkte 19415

Der Weg, wie man eine Länge von irgendetwas, für das das Sinn macht (eine Liste, ein Wörterbuch, ein Tupel, eine Zeichenkette, ...) nimmt, ist der Aufruf len darauf.

l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5

Der Grund für die "seltsame" Syntax ist, dass Python intern die len(object) in object.__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 auf und dann kann man die len auf diese Instanzen.

26voto

Tim Lesher Punkte 6062

Verwenden Sie einfach len(arr) :

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1

24voto

David Locke Punkte 17314

Der bevorzugte Weg, die Länge eines Python-Objekts zu erhalten, ist, es als Argument an die Funktion len Funktion. Intern wird Python dann versuchen, die spezielle __len__ Methode des übergebenen Objekts.

24voto

UncleZeiv Punkte 17632

Python verwendet Duckmäuserschreiben : Es kümmert sich nicht darum, was ein Objekt ist sofern es über die für die jeweilige Situation geeignete Schnittstelle verfügt. Wenn Sie die eingebaute Funktion len() für ein Objekt aufrufen, rufen Sie eigentlich dessen interne Methode __len__ auf. Ein benutzerdefiniertes Objekt kann diese Schnittstelle implementieren und len() wird die Antwort zurückgeben, 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X