Is arr.__len__() de beste manier om de lengte van een array in Python te krijgen?

In Pythonis het volgende de enige manier om het aantal elementen?

arr.__len__()

Zo ja, waarom de vreemde syntaxis?


Antwoord 1, autoriteit 100%

my_list = [1,2,3,4,5]
len(my_list)
# 5

Hetzelfde werkt voor tuples:

my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5

En strings, die eigenlijk gewoon arrays van karakters zijn:

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

Het was op deze manier gedaanzodat lijsten, tuples en andere containertypes of iterables niet allemaal expliciet een openbare .length()-methode, kunt u in plaats daarvan gewoon de len()controleren van alles dat de ‘magische’ __len__()-methode implementeert.

Natuurlijk, dit lijkt misschien overbodig, maar implementaties voor het controleren van de lengte kunnen aanzienlijk variëren, zelfs binnen dezelfde taal. Het is niet ongebruikelijk dat het ene verzamelingstype een .length()-methode gebruikt, terwijl een ander type een .length-eigenschap gebruikt, terwijl een ander type .count(). Het hebben van een trefwoord op taalniveau verenigt het toegangspunt voor al deze typen. Dus zelfs objecten die u misschien niet als lijsten met elementen beschouwt, kunnen nog steeds op lengte worden gecontroleerd. Dit omvat strings, wachtrijen, bomen, enz.

De functionele aard van len()leent zich ook goed voor functionele programmeerstijlen.

lengths = map(len, list_of_containers)

Antwoord 2, autoriteit 4%

De manier waarop je een lengte neemt van iets waarvoor dat zinvol is (een lijst, woordenboek, tuple, string, …) is door er lenop aan te roepen.

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

De reden voor de “vreemde” syntaxis is dat intern python len(object)vertaalt in object.__len__(). Dit geldt voor elk object. Dus, als je een klasse definieert en het is logisch dat deze een lengte heeft, definieer er gewoon een __len__()methode op en dan kan men lenaanroepen op die instanties.


Antwoord 3, autoriteit 2%

Gebruik gewoon len(arr):

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

Antwoord 4, autoriteit 2%

Python gebruikt eendentypering: het maakt niet uit wat een object is , zolang het maar de juiste interface heeft voor de betreffende situatie. Wanneer u de ingebouwde functie len() op een object aanroept, roept u in feite de interne __len__-methode aan. Een aangepast object kan deze interface implementeren en len() retourneert het antwoord, zelfs als het object conceptueel geen reeks is.

Voor een volledige lijst met interfaces, kijk hier: http:// docs.python.org/reference/datamodel.html#basic-customization


Antwoord 5, autoriteit 2%

De beste manier om de lengte van een python-object te krijgen, is door het als argument door te geven aan de functie len. Intern zal python dan proberen de speciale __len__methode aan te roepen van het object dat is doorgegeven.


Antwoord 6

je kunt len(arr). gebruiken
zoals gesuggereerd in eerdere antwoorden om de lengte van de array te krijgen. Als u de afmetingen van een 2D-array wilt, kunt u arr.shapegebruiken om hoogte en breedte terug te geven


Antwoord 7

len(list_name)functie neemt list als parameter en roept de __len__()functie van list aan.


Antwoord 8

Python stelt voor dat gebruikers len()gebruiken in plaats van __len__()voor consistentie, net zoals andere jongens zeiden. Er zijn echter nog enkele andere voordelen:

Voor sommige ingebouwde typen zoals list, str, bytearrayenzovoort, de Cython-implementatie van len()neemt een snelkoppeling. Het retourneert direct de ob_sizein een C-structuur, wat sneller is dan het aanroepen van __len__().

Als u geïnteresseerd bent in dergelijke details, kunt u het boek lezen genaamd “Vloeiend Python” van Luciano Ramalho. Er zijn er veel interessante details in, en kunnen u helpen om Python dieper te begrijpen.

Other episodes