循环 'for element in list_[a:b]' 是否使用解释器优化的未使用副本?
Is loop 'for element in list_[a:b]' using unused copy optimized by interpreters?
这是:
for element in list_[a:b]:
在解释 (CPython) 期间翻译为等同于:
for i in range(a, b):
element = list_[i]
或者是复制
list_[a:b]
真的表演了?
真的复制了。解释器无法知道运行时对象 list_
是什么类型以及您将如何处理它(也许您将开始编辑原始 list_
)。
如果不想生成副本,请使用 itertools.islice
:
import itertools
def f(list_, a, b):
for element in itertools.islice(list_, a, b):
element
您可以查看我链接的 islice
文档以获得完整(python 已翻译)实现,但这是一个简化版本:
def islice(itr, start, stop):
for index, element in enumerate(itr):
if index == stop:
break
if start <= index:
yield element
这是:
for element in list_[a:b]:
在解释 (CPython) 期间翻译为等同于:
for i in range(a, b):
element = list_[i]
或者是复制
list_[a:b]
真的表演了?
真的复制了。解释器无法知道运行时对象 list_
是什么类型以及您将如何处理它(也许您将开始编辑原始 list_
)。
如果不想生成副本,请使用 itertools.islice
:
import itertools
def f(list_, a, b):
for element in itertools.islice(list_, a, b):
element
您可以查看我链接的 islice
文档以获得完整(python 已翻译)实现,但这是一个简化版本:
def islice(itr, start, stop):
for index, element in enumerate(itr):
if index == stop:
break
if start <= index:
yield element