7

私は python3.3 を使用していますが、CPython 関数の一部でキーワード引数を受け入れることがわかりました。

>>> "I like python!".split(maxsplit=1)
['I', 'like python!']

しかし、他のいくつかの関数はキーワード引数を受け入れません:

>>> sum([1,2,3,4], start = 10)
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    sum([1,2,3,4], start = 10)
TypeError: sum() takes no keyword arguments

私の質問は、これらの機能の違いは何ですか? CPython のどの関数がキーワード引数を受け入れ、どの関数が受け入れないのですか? そしてもちろん - なぜですか?

4

1 に答える 1

11

PyArg_ParseTuple()を使用して引数を解析する CPython 関数は、キーワード引数をサポートしていません (主PyArg_ParseTuple()に単純なシーケンスなどの位置パラメーターのみをサポートするため)。

これはCPython implementation details ここで説明されています:

CPython 実装の詳細: 実装は、ドキュメントの目的で「名前が付けられている」場合でも、位置パラメータに名前がない組み込み関数を提供する場合があり、したがってキーワードで提供することはできません。PyArg_ParseTuple()CPython では、引数の解析に使用する C で実装された関数がこれに該当します。

于 2012-11-04T08:11:59.077 に答える