python序列_什么是Python的序列协议?
這不是真的一致.
int
PySequence_Check(PyObject *s)
{
if (PyDict_Check(s))
return 0;
return s != NULL && s->ob_type->tp_as_sequence &&
s->ob_type->tp_as_sequence->sq_item != NULL;
}
PySequence_Check檢查對象是否提供C序列協議,通過表示對象類型的PyTypeObject中的tp_as_sequence成員實現.此tp_as_sequence成員是一個指向結構的指針,該結構包含一系列用于序列行為的函數,例如sq_item用于通過數字索引檢索項目,sq_ass_item用于項目分配.
具體來說,PySequence_Check要求其參數不是dict,并且它提供sq_item.
使用Python編寫的__getitem__類型將提供sq_item,無論它們是概念序列還是映射,因此用Python編寫的不從dict繼承的映射將通過PySequence_Check.
另一方面,collections.abc.Sequence僅檢查對象是否具體地從collections.abc.Sequence繼承,或者它的類(或超類)是否使用collections.abc.Sequence顯式注冊.如果你只是自己實現一個序列而不做其中任何一個,它就不會通過isinstance(your_sequence,Sequence).此外,使用collections.abc.Sequence注冊的大多數類都不支持所有collections.abc.Sequence的方法.總體而言,collections.abc.Sequence的可靠性遠遠低于人們通常的預期.
至于什么算作實際中的序列,它通常是任何支持__len__和__getitem__的整數索引從0開始并且不是映射.如果一個函數的文檔說它需要任何序列,那幾乎總是它需要它.不幸的是,“不是映射”很難測試,原因類似于“序列”如何難以確定.
總結
以上是生活随笔為你收集整理的python序列_什么是Python的序列协议?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: if嵌套while循环语句_选考VB算法
- 下一篇: python怎么命名未知数_码如其人,小