CPython 소스의 여러 C 유형은 __sizeof__
메소드를 가지므로 sys.getsizeof
인 인스턴스의 대략 정확한 크기 (바이트)를 나타낼 수 있습니다.어떤 __sizeof__ 메쏘드가 CPython에 가지고있는 "void * <unused>"인수는 무엇입니까?
이러한 방법은 METH_NOARG
선언하지만, 몇 가지 예를 itertools.product.__sizeof__
를 들어, void* whatever
인수를 수행 12 :
static PyObject *
product_sizeof(productobject *lz, void *unused)
{
Py_ssize_t res;
res = _PyObject_SIZE(Py_TYPE(lz));
res += PyTuple_GET_SIZE(lz->pools) * sizeof(Py_ssize_t);
return PyLong_FromSsize_t(res);
}
static PyMethodDef product_methods[] = {
/* ... */
{"__sizeof__", (PyCFunction)product_sizeof, METH_NOARGS, sizeof_doc},
{NULL, NULL} /* sentinel */
};
다른 사람 (예를 들어하지 않는 반면 일부는 그것을 (예 : 1, 2)이). 인수없이 메소드를 선언 할 때 인수를 갖는 것은 이해가되지 않는 것처럼 보입니다.
"unused"라는 이름을 사용하면 아마도 한 번 의미가있는 것처럼 보이지만 나는 무엇을 알아 내지 못합니다. "git blame"을 사용하고 관련 문제를 읽으려고 시도했지만이 "unused"인수와 관련하여 아무 것도 찾을 수 없습니다. 나는 또한 sys.getsizeof
에 대한 "기본"인수와 관련이있을 수 있다고 생각했지만 그 방법으로 전달되지 않았습니다 - 어떤 기본값이 주어 졌는지 알 수있는 방법의 요지는 무엇입니까?
관심이 있어요 그것 : 논쟁의 목적은 무엇 이었습니까? (그리고 그것이 쓸모 없게되었을 때 왜 제거되지 않았습니까?)
아직 자세한 내용을 알지 못합니다. (당장은 시간이 없습니다.)'* unused'가없는 두 버전은 [Argument Clinic] (https://www.python.org/dev/)입니다. peps/pep-0436 /) 구현. 이것은 거의 확실하게 중요합니다. 생성 된 코드는 추가 인수를 무시합니다. –
빙고 : https://github.com/python/cpython/blob/v3.6.2/Modules/clinic/_pickle.ch#L49-L63 –