이 파이썬에서 오직 하나 None
개체가, 그리고 당신은 항상 Py_None
으로 C에서 참조 할 수 있습니다.
코드 ...
result = Py_BuildValue("");
는
Py_INCREF(Py_None);
result = Py_None;
그냥 원하는 경우 ... 그냥 ... Py_None
의 refcount가를 증가하고 같은 그래서, 그 포인터를 반환 None
을 반환 한 다음 사용하십시오 ...
Py_INCREF(Py_None);
return Py_None;
... 또는 Python 2.4부터 동일한 기능을 수행 할 수 있습니다. Py_BuildValue()
당신을 위해 것을 수행 - 매크로와 NG ...
이 같은 튜플에 반환하는 경우
Py_RETURN_NONE;
...
return Py_BuildValue("(O)", Py_None);
은 ... refcount가를 증가 할 필요가 없습니다 .
그러나이 같은 튜플에 반환하는 경우 ...
PyObject* tuple = PyTuple_New(1);
Py_INCREF(Py_None);
PyTuple_SetItem(tuple, 0, Py_None);
return tuple;
... 다음
PyTuple_SetItem()
당신을 위해 그것을하지 않기 때문에, refcount가를 증가해야합니다.
출처
2013-05-06 14:39:57
Aya
'Py_BuildValue ("(O)", Py_None)'을 사용할 때 명백한 참조 횟수가 필요합니까? 'O'에 대한 [Py_BuildValue()'] (http://docs.python.org/2/c-api/arg.html#Py_BuildValue) 문서는 다음과 같이 기술하고 있습니다 : * 파이썬 객체를 그대로 둡니다. 카운트, 1 씩 증가) * –
@ReinierTorenbeek 죄송합니다. 나는 문서를 다시 검사하고 실수로 잘못된 부분을 읽고 대답을 업데이트 한 다음 오류를 깨닫고 대답을 되 돌렸다. – Aya
@ReinierTorenbeek 답변을 다시 업데이트했습니다. FWIW는 형식 문자열을 구문 분석 할 필요가 없으므로 후자의 방식이 약간 빠릅니다. – Aya