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

2024-03-28 10:10:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

arr.__len__()

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


Tags: 方法元素数量len语法arr
3条回答

Python使用duck typing:它不关心对象是什么,只要它有适合当前情况的接口。在对象上调用内置函数len()时,实际上是在调用其内部的len方法。自定义对象可以实现此接口,len()将返回答案,即使该对象在概念上不是序列。

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

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

正是由于intentionally done this way,所以列表、元组和其他容器类型并不都需要显式实现公共的.length()方法,相反,您只需检查实现“magic”__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

相关问题 更多 >