Er arr.__len__() den foretrukne måde at få længden af et array på i Python?

I Python, er følgende den eneste måde at få antallet af elementer på?

arr.__len__()

Hvis ja, hvorfor så den mærkelige syntaks?

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

Det samme gælder for tupler:

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

Og strings, som i virkeligheden bare er arrays af tegn:

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

Det blev [bevidst gjort på denne måde] (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), så lister, tupler og andre containertyper ikke alle eksplicit skulle implementere en offentlig .length()-metode, men at man i stedet bare kan kontrollere len() af alt, der implementerer den magiske __len__()-metode.

Det kan virke overflødigt, men implementeringer af længdekontrol kan variere betydeligt, selv inden for det samme sprog. Det er ikke ualmindeligt at se en samlingstype bruge en .length()-metode, mens en anden type bruger en .length-egenskab, mens endnu en anden bruger .count(). Et nøgleord på sprogniveau gør det muligt at ensrette indgangspunktet for alle disse typer. Så selv objekter, som du måske ikke anser for at være lister af elementer, kan stadigvæk længdekontrolleres. Dette omfatter strenge, køer, træer osv.

Den funktionelle karakter af len() egner sig også godt til funktionelle programmeringsstile.

lengths = map(len, list_of_containers)
Kommentarer (17)

Den foretrukne måde at få længden af et python-objekt på er at sende det som et argument til funktionen len. Internt vil python derefter forsøge at kalde den specielle __len__-metode for det objekt, der blev overdraget.

Kommentarer (0)

Du skal blot bruge len(arr):

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