21

hasattr 組み込み関数のソース コードを調べていたところ、興味をそそられた次の 2 行に気付きました。

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

グローバルな値ではPy_Falseありませんか? Py_Trueまったくの好奇心から、Python がこれらの変数の参照カウントを保持しているのはなぜですか?

4

1 に答える 1

22

すべてのオブジェクト処理を均一にすることです。関数からの戻り値を処理するCコードを記述している場合、そのオブジェクトの参照カウントをインクリメントおよびデクリメントする必要があります。関数がTrueを返した場合、その参照カウントを操作するかどうかを知るために、それがそれらの特別なオブジェクトの1つであるかどうかを確認する必要はありません。すべてのオブジェクトを同じように扱うことができます。

TrueとFalse(およびNone、btw)を他のすべてのオブジェクトと同じように扱うことにより、Cコードは全体を通してはるかに単純になります。

于 2009-09-22T14:39:43.330 に答える