考虑以下python会话(3.6.1):
>>> from itertools import islice
>>> l = [i for i in range(10)]
>>> islice(l, 0, 1)
<itertools.islice object at 0x7f87c9293638>
>>> (lambda it: islice(it, 0, 1))(l)
<itertools.islice object at 0x7fe35ab40408>
这里没有什么是出乎意料的。现在,与functools.partial
:
>>> from functools import partial
>>> partial(islice, 0, 1)(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
partial
似乎以一种非常意想不到的方式干扰islice
行为。
这种行为背后的原因是什么?这是因为 islice 不处理关键字参数,例如 str.split 几个版本?