Je arr.__len__() preferovaný způsob, jak v Pythonu zjistit délku pole?

Je v Pythonu jediným způsobem, jak získat počet prvků, následující?

arr.__len__()

Pokud ano, proč ta podivná syntaxe?

Řešení
my_list = [1,2,3,4,5]
len(my_list)
# 5

Totéž platí pro tuply:

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

A řetězce, které jsou ve skutečnosti jen pole znaků:

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

Bylo to záměrně uděláno takto, aby seznamy, tuply a další kontejnerové typy nemusely explicitně implementovat veřejnou metodu .length(), ale abyste mohli zkontrolovat len() čehokoli, co implementuje 'magickou' metodu __len__().

Jistě, může se to zdát zbytečné, ale implementace kontroly délky se mohou značně lišit, a to i v rámci jednoho jazyka. Není'neobvyklé, že jeden typ kolekce používá metodu .length(), zatímco jiný typ používá vlastnost .length, zatímco další typ používá .count(). Existence klíčového slova na úrovni jazyka sjednocuje vstupní bod pro všechny tyto typy. Takže i objekty, které nemusíte považovat za seznamy prvků, mohou být stále kontrolovány na délku. Patří sem řetězce, fronty, stromy atd.

Funkční povaha funkce len() se také dobře hodí pro funkcionální styly programování.

lengths = map(len, list_of_containers)
Komentáře (17)

Délku libovolného objektu v jazyce Python zjistíte nejlépe tak, že jej předáte jako argument funkci len. Vnitřně se pak python pokusí zavolat speciální metodu __len__ předaného objektu.

Komentáře (0)

Stačí použít len(arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
Komentáře (0)