Ali je v Pythonu naslednji način edini način za pridobitev števila elementov?
arr.__len__()
Če je tako, zakaj ta nenavadna sintaksa?
my_list = [1,2,3,4,5]
len(my_list)
# 5
Enako velja tudi za kupole:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
in nizi, ki so v resnici le nizi znakov:
my_string = 'hello world'
len(my_string)
# 11
To je bilo namenoma narejeno na ta način, da seznamom, tuplom in drugim vrstam vsebnikov ne bi bilo treba izrecno implementirati javne metode .length()
, temveč bi lahko samo preverili len()
vsega, kar implementira 'magično' metodo __len__()
.
Seveda se to morda zdi odveč, vendar se izvedbe preverjanja dolžine lahko zelo razlikujejo, celo znotraj istega jezika. Neredko se zgodi, da en tip zbirke uporablja metodo .length()
, medtem ko drug tip uporablja lastnost .length
, tretji pa .count()
. Ključna beseda na ravni jezika poenoti vstopno točko za vse te vrste. Tako je mogoče preverjati dolžino tudi pri predmetih, ki jih morda ne štejete za sezname elementov. To vključuje nize, čakalne vrste, drevesa itd.
Funkcionalna narava funkcije len()
je primerna tudi za funkcionalne stile programiranja.
lengths = map(len, list_of_containers)
Najprimernejši način za pridobitev dolžine kateregakoli pythonskega predmeta je, da ga posredujete kot argument funkciji len
. Python bo nato poskušal poklicati posebno metodo __len__
objekta, ki je bil posredovan.
Uporabite len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1