当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《arr.__len__()是获取Python数组长度的首选方法吗?》经验,为你挑选了7个好方法。

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

arr.__len__()

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



1> Soviut..:
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()是一个全局的内置函数; __len __()是对象可以实现的方法.len(foo)通常最终调用foo .__ len __().
我同意Carl Meyer的观点 - 说"不需要明确地实现"一个公共的.length()方法具有误导性,其核心含义是错误的.任何东西仍然需要实现__len__,并且总是可以简单地实现自己想要的长度方法 - 绕过len函数.所以我真的认为这是一种适合Guido如何看世界的任意怪异.它可能与任何普遍推理无关.
你提到通过提供len(),每个容器不必实现.length()方法,但是如果每个类型仍然实现了一个由len()调用的__len __()方法,它会有什么不同呢?len()处理不同的容器类型是不同的?
@Simon:关于"并不是所有人都需要实现.length()"这一点令人困惑.容器类型仍然需要实现返回其长度的方法; 关键是它是一个标准化的协议,而不是你必须为每种类型查找的特殊方法.双重下划线表示这一点.
len()是一个语言命令,__ len __()是容器类型的方法.
@Joan:不,由于动态性和鸭子打字,Python中没有任何东西是无法访问的.让Java/.NET中显式的公共/私有东西去,它根本不适用于Python.我已经习惯了一段时间.

2> rz...:

你采取任何有意义的事情(列表,字典,元组,字符串......)的方式就是调用len它.

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

"奇怪"语法的原因是内部python转换len(object)object.__len__().这适用于任何对象.所以,如果你要定义一个类,并且它有一个长度是有意义的,只需__len__()在它上面定义一个方法,然后就可以调用len这些实例.



3> David Locke..:

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



4> UncleZeiv..:

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

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



5> Tim Lesher..:

只需使用len(arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1



6> Ahmed Abobak..:

您可以len(arr) 按照之前的答案中的建议使用以获取数组的长度.如果您需要2D数组的尺寸,可以使用arr.shape返回高度和宽度



7> Harun ERGUL..:

len(list_name)function将list作为参数,它调用list的__len__()函数.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有