协慌网

登录 贡献 社区

arr .__ len __()是在 Python 中获取数组长度的首选方法吗?

Python 中 ,以下是获取元素数量的唯一方法吗?

arr.__len__()

如果是这样,为什么会有奇怪的语法?

答案

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

同样适用于元组:

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

和字符串,实际上只是字符数组:

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

它是故意这样做的方式 ,使列表,元组和其他类型的容器没有全部需要明确公开实施.length()方法,而不是你可以检查len()的任何实现的 “魔力” __len__()方法。

当然,这似乎是多余的,但是长度检查的实现可能会有很大的不同,即使在同一语言中也是如此。这不是经常看到一个集合类型使用.length()方法,而另一种类型的使用.length属性,而另一个使用.count()使用语言级别的关键字可以统一所有这些类型的入口点。因此,即使您可能不认为是元素列表的对象仍然可以进行长度检查。这包括字符串,队列,树等。

len()的功能本质也非常适合于编程的功能样式。

lengths = map(len, list_of_containers)

取任何有意义的长度(列表,字典,元组,字符串等)的方式是在其上调用len

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

之所以使用 “奇怪的” 语法,是因为 python 在内部将len(object)转换为object.__len__() 。这适用于任何对象。因此,如果您要定义某个类并且使其具有长度是有意义的,则只需在其上定义__len__()方法,然后您就可以在这些实例上调用len

获取任何 python 对象长度的首选方法是将其作为参数传递给len函数。然后在内部,python 将尝试调用传递的对象的特殊__len__方法。