我不应该使用 built-in 元组特定的功能吗?

Should I not use built-in tuple specific functions?

当我查找 built-in collection 类型 tuple online 的方法时,它说元组只有两种方法: count()index()。但是,每当我尝试查找元组的 pydoc 时:

python -m pydoc tuple

我得到以下信息:

Help on class tuple in module builtins:

class tuple(object)
 |  tuple(iterable=(), /)
 |
 |  Built-in immutable sequence.
 |
 |  If no argument is given, the constructor returns an empty tuple.
 |  If iterable is specified the tuple is initialized from iterable's items.
 |
 |  If the argument is a tuple, the return value is the same object.
 |
 |  Built-in subclasses:
 |      asyncgen_hooks
 |      UnraisableHookArgs
 |
 |  Methods defined here:
 |
 |  __add__(self, value, /)
 |      Return self+value.
 |
 |  __contains__(self, key, /)
 |      Return key in self.
 |
 |  __eq__(self, value, /)
 |      Return self==value.
 |
 |  __ge__(self, value, /)
 |      Return self>=value.
 |
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |
 |  __getitem__(self, key, /)
 |      Return self[key].
 |

它持续了一段时间。我注意到如果我想将一个元素添加到一个元组中,那么我必须创建一个新的元组。

a = ('hi', 'my')
b = (*a, 'name', 'is')
>>> b
('hi', 'my', 'name', 'is')

但是方法 add() 对我做同样的事情。

在 pydocs 中弹出的方法是否是不打算在模块外部使用的模块特定方法?我想有点像封装的弱形式?

编辑:从标题中删除 'module'。 @juanpa.arrivillaga 是正确的。元组不是模块。

pydoc 提到的方法,以双下划线开始和结束。这些用于实现运算符、内置方法等。应该很少被调用。

From the Python PEP 8 -- Style Guide for Python Code:

Descriptive: Naming Styles

  • double_leading_and_trailing_underscore_: "magic" objects or attributes that live in user-controlled namespaces. E.g. init, import or file. Never invent such names; only use them as documented.

w3schools 不是很好的参考,请务必查看 Python 文档。例如 - Tuples

  1. W3School 是一个非常值得怀疑的信息来源,因为它们通常是错误的、误导性的或不完整的。使用 official documentation 作为您的主要信息来源。

  2. 元组实现 common sequence operations. Everything that's defined as a "sequence" 支持某些操作,countindex 是其中的两个。其余的序列操作未实现作为特定方法,但通过运算符。例如,将两个序列加在一起:

    (1, 2) + (3, 4)
    

    这是通过 __add__ methodtuple class 中实现的。这就是所有运算符与 Python 中的值交互的方式:a + b 被翻译成 a.__add__(b)。这样,每个对象都可以自定义将其“添加”到另一个对象的确切含义。您应该始终使用运算符来使用这些抽象定义,而不是自己调用特定的 __add__ 方法。

    是的,元组是 不可变的,因此您不能扩展现有的元组,只能将两个元组添加到一个新的元组中。