在Python中获取数组长度,arr.__len__()是否是首选方式?

20 浏览
0 Comments

在Python中获取数组长度,arr.__len__()是否是首选方式?

这个问题已经在这里有了答案:
Python中如何获取列表中元素的数量(列表的长度)?

社区正在审查是否在25天前重新打开此问题。

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

arr.__len__()

如果是这样,为什么要使用这种奇怪的语法?

admin 更改状态以发布 2023年5月20日
0
0 Comments

在 Python 中获取列表、字典、元组、字符串等任何序列的长度,是通过调用 len 函数实现的。

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

奇怪语法的原因是 Python 内部将 len(object) 转换为 object.__len__(),这适用于任何对象。因此,如果您正在定义某个类并希望它具有长度,则只需在其中定义一个 __len__() 方法,然后就可以在这些实例上调用 len

0
0 Comments

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)

0