如果列表目录提到__count__和__len___,为什么使用这两个运算符的语法不同



所以我只是在学习python是如何工作的,我对如何使用一些函数有点困惑。我知道当我浏览列表目录dir(list)时,我会得到一个列表,列出我在这个模块中可以做的所有功能。但在实践中(我的控制台(,我无法获得相同的语法来处理目录中列出的__count____len__函数。

步骤:

  1. dir(list)#获取列表模块中可用的所有功能
  2. x = ['red', 'blue', 'green', 'yellow', 'black', 'cyan']#定义列表
  3. list.count(x,'blue')#使用列表模块内的计数功能
  4. list.len(x)#尝试使用相同的语法,但收到错误
  5. len(x)#给我列表中的项目数

如果lencount是同一个list模块目录的一部分,为什么运行它们的语法不同?

__len__这样有下划线的方法通常是"神奇的方法";实现python功能并且通常不显式调用的。您可以在数据模型中找到描述。例如,当你使用len()函数时,python会调用obj.__len__()来实现它。类似于obj1 + obj2:加法可能会变成对obj1.__add__(obj2)的调用。这就是python实现其动态特性的方式。对象可以自己选择操作的含义。

count方法不同。它在python列表中实现,用于计算对象在列表中出现的次数。对于所有对象来说,这并不是一件通常有用的事情,所以python并没有为它实现一个神奇的方法

毫不奇怪,不同的方法需要用不同的参数来调用——它们做不同的事情。通常,方法不是通过它们的类+实例来调用的。只需使用实例即可。

>>> x = ['red', 'blue', 'green', 'yellow', 'black', 'cyan']
>>> list.count(x, 'blue') == x.count('blue')  # count instances of "blue"
True
>>> list.__len__(x) == len(x) # get list length
True

最新更新