要找到anypython操作符的实现,首先使用^{} function找出python为其生成的字节码:>>> dis.dis("'0' in ()")
1 0 LOAD_CONST 0 ('0')
2 LOAD_CONST 1 (())
4 COMPARE_OP 6 (in)
6 RETURN_VALUE
in运算符变成COMPARE_OP字节码。现在您可以跟踪此操作码在^{}中的Python求值循环中是如何处理的:
^{pr2}$
cmp_outcome()是defined in the same file,in运算符是其中一个开关:case PyCmp_IN:
res = PySequence_Contains(w, v);
if (res < 0)
return NULL;
break;
一个快速grep显示了PySequence_Contains在Objects/abstract.c中的定义:int
PySequence_Contains(PyObject *seq, PyObject *ob)
{
Py_ssize_t result;
PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
if (sqm != NULL && sqm->sq_contains != NULL)
return (*sqm->sq_contains)(seq, ob);
result = _PySequence_IterSearch(seq, ob, PY_ITERSE