我不应该使用 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:
- 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
W3School 是一个非常值得怀疑的信息来源,因为它们通常是错误的、误导性的或不完整的。使用 official documentation 作为您的主要信息来源。
元组实现 common sequence operations. Everything that's defined as a "sequence" 支持某些操作,count
和 index
是其中的两个。其余的序列操作未实现作为特定方法,但通过运算符。例如,将两个序列加在一起:
(1, 2) + (3, 4)
这是通过 __add__
method 在 tuple
class 中实现的。这就是所有运算符与 Python 中的值交互的方式:a + b
被翻译成 a.__add__(b)
。这样,每个对象都可以自定义将其“添加”到另一个对象的确切含义。您应该始终使用运算符来使用这些抽象定义,而不是自己调用特定的 __add__
方法。
是的,元组是 不可变的,因此您不能扩展现有的元组,只能将两个元组添加到一个新的元组中。
当我查找 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:
- 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
W3School 是一个非常值得怀疑的信息来源,因为它们通常是错误的、误导性的或不完整的。使用 official documentation 作为您的主要信息来源。
元组实现 common sequence operations. Everything that's defined as a "sequence" 支持某些操作,
count
和index
是其中的两个。其余的序列操作未实现作为特定方法,但通过运算符。例如,将两个序列加在一起:(1, 2) + (3, 4)
这是通过
__add__
method 在tuple
class 中实现的。这就是所有运算符与 Python 中的值交互的方式:a + b
被翻译成a.__add__(b)
。这样,每个对象都可以自定义将其“添加”到另一个对象的确切含义。您应该始终使用运算符来使用这些抽象定义,而不是自己调用特定的__add__
方法。是的,元组是 不可变的,因此您不能扩展现有的元组,只能将两个元组添加到一个新的元组中。