“Python/docs/3.9/c-api/set”的版本间差异
来自菜鸟教程
Python/docs/3.9/c-api/set
(autoload) |
小 (Page commit) |
||
第1行: | 第1行: | ||
+ | {{DISPLAYTITLE:设置对象 — Python 文档}} | ||
<div id="set-objects" class="section"> | <div id="set-objects" class="section"> | ||
<span id="setobjects"></span> | <span id="setobjects"></span> | ||
− | = | + | = 设置对象 = |
− | + | 本节详细介绍了 [[../../library/stdtypes#set|set]] 和 [[../../library/stdtypes#frozenset|frozenset]] 对象的公共 API。 下面未列出的任何功能最好使用抽象对象协议(包括 [[../call#c|PyObject_CallMethod()]]、[[../object#c|PyObject_RichCompareBool()]]、[[../object#c|PyObject_Hash()]]、 [[../object#c|PyObject_Repr()]]、[[../object#c|PyObject_IsTrue()]]、[[../object#c|PyObject_Print()和]][[../object#c|PyObject_GetIter())或抽象数协议(包括PyObject_Print()]]和) )、[[../number#c|PyNumber_Subtract()]]、[[../number#c|PyNumber_Or()、]][[../number#c|PyNumber_Xor()]]、PyNumber_InPlaceAnd()、PyNumber_Or() )、[[../number#c|PyNumber_InPlaceOr()]] 和 [[../number#c|PyNumber_InPlaceXor()]])。 | |
− | |||
− | |||
− | [[../object#c| | ||
− | [[../object#c| | ||
− | [[../object#c| | ||
− | |||
− | [[../number#c| | ||
− | |||
− | [[../number#c| | ||
− | ; | + | ; <span class="k"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySetObject</span></span></span><br /> |
− | |||
− | + | : [[../structures#c|PyObject]] 的这个子类型用于保存 [[../../library/stdtypes#set|set]] 和 [[../../library/stdtypes#frozenset|frozenset]] 对象的内部数据。 它就像一个 [[../dict#c|PyDictObject]],因为它是小集合的固定大小(很像元组存储),并且将指向一个单独的、可变大小的内存块用于中型和大型集(很像列表存储) )。 此结构的任何字段都不应被视为公共字段,并且可能会发生变化。 所有访问都应该通过文档化的 API 来完成,而不是通过操作结构中的值来完成。 | |
− | |||
− | ; [[../type#c|PyTypeObject]] < | + | ; [[../type#c|<span class="n"><span class="pre">PyTypeObject</span></span>]]<span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Type</span></span></span><br /> |
− | |||
− | + | : 这是一个 [[../type#c|PyTypeObject]] 的实例,代表 Python [[../../library/stdtypes#set|set]] 类型。 | |
− | |||
− | ; | + | ; [[../type#c|<span class="n"><span class="pre">PyTypeObject</span></span>]]<span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFrozenSet_Type</span></span></span><br /> |
− | |||
− | + | : 这是一个 [[../type#c|PyTypeObject]] 的实例,代表 Python [[../../library/stdtypes#frozenset|frozenset]] 类型。 | |
− | |||
− | + | 以下类型检查宏适用于指向任何 Python 对象的指针。 同样,构造函数适用于任何可迭代的 Python 对象。 | |
− | |||
− | ; int < | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Check</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">p</span></span><span class="sig-paren">)</span><br /> |
− | |||
− | + | : 如果 ''p'' 是 [[../../library/stdtypes#set|set]] 对象或子类型的实例,则返回 true。 此功能总是成功。 | |
− | : | ||
− | < | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFrozenSet_Check</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">p</span></span><span class="sig-paren">)</span><br /> |
− | < | ||
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | : 如果 ''p'' 是 [[../../library/stdtypes#frozenset|frozenset]] 对象或子类型的实例,则返回 true。 此功能总是成功。 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyAnySet_Check</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">p</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | + | : 如果 ''p'' 是 [[../../library/stdtypes#set|set]] 对象、[[../../library/stdtypes#frozenset|frozenset]] 对象或子类型的实例,则返回 true。 此功能总是成功。 | |
− | : | ||
− | ; | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyAnySet_CheckExact</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">p</span></span><span class="sig-paren">)</span><br /> |
− | |||
− | + | : 如果 ''p'' 是 [[../../library/stdtypes#set|set]] 对象或 [[../../library/stdtypes#frozenset|frozenset]] 对象但不是子类型的实例,则返回 true。 此功能总是成功。 | |
− | : | ||
− | ; int < | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFrozenSet_CheckExact</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">p</span></span><span class="sig-paren">)</span><br /> |
− | |||
− | + | : 如果 ''p'' 是 [[../../library/stdtypes#frozenset|frozenset]] 对象但不是子类型的实例,则返回 true。 此功能总是成功。 | |
− | |||
− | ; | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PySet_New</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">iterable</span></span><span class="sig-paren">)</span><br /> |
− | |||
− | < | + | : 返回一个新的 [[../../library/stdtypes#set|set]],其中包含由 ''iterable'' 返回的对象。 ''iterable'' 可以是 <code>NULL</code> 来创建一个新的空集。 成功时返回新集合,失败时返回 <code>NULL</code>。 如果 ''iterable'' 实际上不是可迭代的,则提高 [[../../library/exceptions#TypeError|TypeError]]。 构造函数也可用于复制集合 (<code>c=set(s)</code>)。 |
− | < | + | |
− | < | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFrozenSet_New</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">iterable</span></span><span class="sig-paren">)</span><br /> |
− | < | + | |
− | + | : 返回一个新的 [[../../library/stdtypes#frozenset|frozenset]],其中包含由 ''iterable'' 返回的对象。 ''iterable'' 可以是 <code>NULL</code> 来创建一个新的空冻结集。 成功时返回新集合,失败时返回 <code>NULL</code>。 如果 ''iterable'' 实际上不是可迭代的,则提高 [[../../library/exceptions#TypeError|TypeError]]。 | |
− | set | + | |
− | [[../../library/stdtypes#set|<code>set</code>]] | + | 以下函数和宏可用于 [[../../library/stdtypes#set|set]] 或 [[../../library/stdtypes#frozenset|frozenset]] 的实例或其子类型的实例。 |
+ | |||
+ | ; <span class="n"><span class="pre">Py_ssize_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Size</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">anyset</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 返回 [[../../library/stdtypes#set|set]] 或 [[../../library/stdtypes#frozenset|frozenset]] 对象的长度。 相当于 <code>len(anyset)</code>。 如果 ''anyset'' 不是 [[../../library/stdtypes#set|set]]、[[../../library/stdtypes#frozenset|frozenset]] 或子类型的实例,则引发 <code>PyExc_SystemError</code>。 | ||
+ | |||
+ | ; <span class="n"><span class="pre">Py_ssize_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_GET_SIZE</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">anyset</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : [[#c.PySet_Size|PySet_Size()]] 没有错误检查的宏形式。 | ||
+ | |||
+ | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Contains</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">anyset</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">key</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 如果找到则返回 <code>1</code>,如果未找到则返回 <code>0</code>,如果遇到错误则返回 <code>-1</code>。 与 Python <code>__contains__()</code> 方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 ''键'' 不可散列,则引发 [[../../library/exceptions#TypeError|TypeError]]。 如果 ''anyset'' 不是 [[../../library/stdtypes#set|set]]、[[../../library/stdtypes#frozenset|frozenset]] 或子类型的实例,则提高 <code>PyExc_SystemError</code>。 | ||
+ | |||
+ | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Add</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">set</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">key</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 将 ''key'' 添加到 [[../../library/stdtypes#set|set]] 实例。 也适用于 [[../../library/stdtypes#frozenset|frozenset]] 实例(如 [[../tuple#c|PyTuple_SetItem()]] 它可用于在暴露给其他代码之前填充全新的frozensets的值)。 成功时返回 <code>0</code>,失败时返回 <code>-1</code>。 如果 ''键'' 不可散列,则引发 [[../../library/exceptions#TypeError|TypeError]]。 如果没有增长空间,则引发 [[../../library/exceptions#MemoryError|MemoryError]]。 如果 ''set'' 不是 [[../../library/stdtypes#set|set]] 或其子类型的实例,则引发 [[../../library/exceptions#SystemError|SystemError]]。 | ||
+ | |||
+ | 以下函数可用于 [[../../library/stdtypes#set|set]] 或其子类型的实例,但不适用于 [[../../library/stdtypes#frozenset|frozenset]] 或其子类型的实例。 | ||
+ | |||
+ | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Discard</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">set</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">key</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 如果找到并删除,则返回 <code>1</code>,如果未找到(未采取任何操作),则返回 <code>0</code>,如果遇到错误,则返回 <code>-1</code>。 不会为丢失的键引发 [[../../library/exceptions#KeyError|KeyError]]。 如果 ''键'' 不可散列,则引发 [[../../library/exceptions#TypeError|TypeError]]。 与 Python <code>discard()</code> 方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 ''set'' 不是 [[../../library/stdtypes#set|set]] 或其子类型的实例,则提高 <code>PyExc_SystemError</code>。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Pop</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">set</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 返回对 ''set'' 中任意对象的新引用,并从 ''set'' 中删除该对象。 失败时返回 <code>NULL</code>。 如果集合为空,则引发 [[../../library/exceptions#KeyError|KeyError]]。 如果 ''set'' 不是 [[../../library/stdtypes#set|set]] 或其子类型的实例,则引发 [[../../library/exceptions#SystemError|SystemError]]。 | ||
+ | |||
+ | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PySet_Clear</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">set</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 清空所有元素的现有集合。 | ||
+ | |||
+ | |||
+ | </div> | ||
+ | <div class="clearer"> | ||
− | |||
− | |||
</div> | </div> | ||
− | [[Category:Python 3.9 | + | [[Category:Python 3.9 文档]] |
2021年10月31日 (日) 04:50的最新版本
设置对象
本节详细介绍了 set 和 frozenset 对象的公共 API。 下面未列出的任何功能最好使用抽象对象协议(包括 PyObject_CallMethod()、PyObject_RichCompareBool()、PyObject_Hash()、 PyObject_Repr()、PyObject_IsTrue()、PyObject_Print()和PyObject_GetIter())或抽象数协议(包括PyObject_Print()和) )、PyNumber_Subtract()、PyNumber_Or()、PyNumber_Xor()、PyNumber_InPlaceAnd()、PyNumber_Or() )、PyNumber_InPlaceOr() 和 PyNumber_InPlaceXor())。
- type PySetObject
- PyObject 的这个子类型用于保存 set 和 frozenset 对象的内部数据。 它就像一个 PyDictObject,因为它是小集合的固定大小(很像元组存储),并且将指向一个单独的、可变大小的内存块用于中型和大型集(很像列表存储) )。 此结构的任何字段都不应被视为公共字段,并且可能会发生变化。 所有访问都应该通过文档化的 API 来完成,而不是通过操作结构中的值来完成。
- PyTypeObject PySet_Type
- 这是一个 PyTypeObject 的实例,代表 Python set 类型。
- PyTypeObject PyFrozenSet_Type
- 这是一个 PyTypeObject 的实例,代表 Python frozenset 类型。
以下类型检查宏适用于指向任何 Python 对象的指针。 同样,构造函数适用于任何可迭代的 Python 对象。
- int PySet_Check(PyObject *p)
- 如果 p 是 set 对象或子类型的实例,则返回 true。 此功能总是成功。
- int PyFrozenSet_Check(PyObject *p)
- 如果 p 是 frozenset 对象或子类型的实例,则返回 true。 此功能总是成功。
- int PyAnySet_Check(PyObject *p)
- int PyAnySet_CheckExact(PyObject *p)
- int PyFrozenSet_CheckExact(PyObject *p)
- 如果 p 是 frozenset 对象但不是子类型的实例,则返回 true。 此功能总是成功。
- 返回一个新的 set,其中包含由 iterable 返回的对象。 iterable 可以是
NULL
来创建一个新的空集。 成功时返回新集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代的,则提高 TypeError。 构造函数也可用于复制集合 (c=set(s)
)。
- 返回一个新的 frozenset,其中包含由 iterable 返回的对象。 iterable 可以是
NULL
来创建一个新的空冻结集。 成功时返回新集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代的,则提高 TypeError。
以下函数和宏可用于 set 或 frozenset 的实例或其子类型的实例。
- Py_ssize_t PySet_Size(PyObject *anyset)
- 返回 set 或 frozenset 对象的长度。 相当于
len(anyset)
。 如果 anyset 不是 set、frozenset 或子类型的实例,则引发PyExc_SystemError
。
- Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
- PySet_Size() 没有错误检查的宏形式。
- 如果找到则返回
1
,如果未找到则返回0
,如果遇到错误则返回-1
。 与 Python__contains__()
方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 键 不可散列,则引发 TypeError。 如果 anyset 不是 set、frozenset 或子类型的实例,则提高PyExc_SystemError
。
- 将 key 添加到 set 实例。 也适用于 frozenset 实例(如 PyTuple_SetItem() 它可用于在暴露给其他代码之前填充全新的frozensets的值)。 成功时返回
0
,失败时返回-1
。 如果 键 不可散列,则引发 TypeError。 如果没有增长空间,则引发 MemoryError。 如果 set 不是 set 或其子类型的实例,则引发 SystemError。
以下函数可用于 set 或其子类型的实例,但不适用于 frozenset 或其子类型的实例。
- 如果找到并删除,则返回
1
,如果未找到(未采取任何操作),则返回0
,如果遇到错误,则返回-1
。 不会为丢失的键引发 KeyError。 如果 键 不可散列,则引发 TypeError。 与 Pythondiscard()
方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 set 不是 set 或其子类型的实例,则提高PyExc_SystemError
。
- 返回对 set 中任意对象的新引用,并从 set 中删除该对象。 失败时返回
NULL
。 如果集合为空,则引发 KeyError。 如果 set 不是 set 或其子类型的实例,则引发 SystemError。
- int PySet_Clear(PyObject *set)
- 清空所有元素的现有集合。