tôi sử dụng python3.3 và chỉ phát hiện ra rằng nó chấp nhận đối số từ khóa trong một số chức năng CPython của nó:Python chấp nhận các đối số từ khóa trong các hàm CPython?
>>> "I like python!".split(maxsplit=1)
['I', 'like python!']
Nhưng một số chức năng khác không chấp nhận đối số từ khóa:
>>> 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
Câu hỏi của tôi là: sự khác nhau giữa các chức năng đó là gì? Những chức năng nào trong CPython chấp nhận đối số từ khóa, chức năng nào không? Và tất nhiên - tại sao?
Hmm, nhưng trong python3.2 bạn không thể chèn đối số từ khóa trong 'str.split' - điều đó có nghĩa là chúng đã thay đổi việc triển khai hàm? – slallum
@slallum, tôi không có phiên bản 3.3 của CPython để xác nhận nó, nhưng nó thực sự trông giống như việc thực hiện 'split()' trong 3.3 không sử dụng 'PyArg_ParseTuple()' nữa. –
@slallum: có, việc triển khai đã thay đổi. [3.3 str.split chấp nhận từ khóa] (http://hg.python.org/cpython/file/9371bf2287c4/Objects/unicodeobject.c#l12197) (nó sử dụng 'PyArg_ParseTupleAndKeywords()'), nhưng [3.2 không] (http://hg.python.org/cpython/file/3.2/Objects/unicodeobject.c#l8691) – jfs