def islice(iterable, *args):
# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G
s = slice(*args)
start, stop, step = s.start or 0, s.stop or sys.maxsize, s.step or 1
it = iter(range(start, stop, step))
try:
nexti = next(it)
except StopIteration:
# Consume *iterable* up to the *start* position.
for i, element in zip(range(start), iterable):
pass
return
try:
for i, element in enumerate(iterable):
if i == nexti:
yield element
nexti = next(it)
except StopIteration:
# Consume to *stop*.
for i, element in zip(range(i + 1, stop), iterable):
pass
https://docs.python.org/zh-cn... 官方文档下的实现islice的大致方法
请问 for i, element in zip(range(start), iterable):pass 和 for i, element in zip(range(i + 1, stop), iterable):pass,捕捉异常之后for循环之后pass,既然是pass,这两段代码有什么作用呢?
我想你理解了这几行代码的输出,就明白为什们islice要那么设计了。
另外你思考下list(a) 和 list(b) 出现的先后顺序不同会有什么影响。