在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()时,实际上正在调用其内部__len__方法。 自定义对象可以实现此接口,并且len()将返回答案,即使对象在概念上不是序列。

有关接口的完整列表,请看这里:http://docs.python.org/reference/datamodel.html#basic-customization

链接地址: http://www.djcxy.com/p/28337.html

上一篇: Getting the length of an array in Python

下一篇: String Object Representation in Python