[英]How to find the definition of an operator in the python source code?
由于这个SO问题 ,我对python中“in”( __contains__
?)运算符的实现感到好奇。 我下载了源代码并试图grep,浏览等找到它的一些基本定义,但我还没有成功。 有人能告诉我找到它的方法吗?
当然,找到那种东西的一般方法是最好的,所以像我这样的人可以学习下次捕鱼。
我正在使用2.7,但如果3.x的过程完全不同,那么两种技术都会很好。
我认为实现从Objects/abstract.c
中的PySequence_Contains
开始。 我通过查看Modules/operator.c
的operator.contains
的实现找到了它,它包装了Python函数中的所有本机操作符。
基于Inerdial在正确方向上的推动,这是我如何挖掘它。 任何关于更好的方式的反馈将不胜感激。
ack --type=cc __contains__
导致operator.c
spam2(contains,__contains__,
"contains(a, b) -- Same as b in a (note reversed operands).")
它将“包含”重命名为“op_contains”,后者又指向PySequence_Contains(不在此文件中)
ack --type=cc PySequence_Contains
导致abstract.c中的定义(只是下面的返回)
result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
这导致_PySequence_IterSearch(只是下面的比较)
cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
这导致PyObject_RichCompareBool(不在此文件中)
ack --type=cc PyObject_RichCompareBool
导致在object.c中的定义,我终于找到了在实际的相等检查之前进行身份检查的比较的实现(我关于比较的原始问题)。
/* Quick result when objects are the same.
Guarantees that identity implies equality. */
if (v == w) {
if (op == Py_EQ)
return 1;
else if (op == Py_NE)
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.