<p>看到这一点,我决定做一个快速测试,并编写和运行以下代码:</p>
<pre><code>from functools import wraps
from time import time
TEST_DATA = range(100)
def timeit(func):
@wraps(func)
def wrapped(*args, **kwargs):
start = time()
func(*args, **kwargs)
end = time()
print(f'running time for {func.__name__} = {end-start}')
return wrapped
def num_squared_iterator(nums):
for i in nums:
yield i**2
@timeit
def get_num_squared_list(nums):
l = []
for i in nums:
l.append(i**2)
return l
@timeit
def get_num_squared_list_from_iterator(nums):
return list(num_squared_iterator(nums))
if __name__ == '__main__':
get_num_squared_list(TEST_DATA)
get_num_squared_list_from_iterator(TEST_DATA)
</code></pre>
<p>我运行了很多次测试代码,每次(令我惊讶的是)get\u num\u squared\u list\u from\u iterator函数实际上比get\u num\u squared\u list函数运行得(稍微)快。你知道吗</p>
<p>以下是我头几次跑步的结果:</p>
<p>1。
get_num_squared_list的运行时间=5.2928924560546875e-05</p>
<p>从迭代器获取平方列表的运行时间=5.0067901611328125e-05</p>
<p>2。
get\u num\u squared\u list的运行时间=5.3882598876953125e-05</p>
<p>从迭代器获取平方列表的运行时间=4.982948303222656e-05</p>
<p>三。
get\u num\u squared\u list的运行时间=5.1975250244140625e-05</p>
<p>从迭代器获取平方列表的运行时间=4.76837158203125e-05</p>
<p>我猜这是因为做一个列表.append在循环的每次迭代中使用get\u num\u squared\u list函数。你知道吗</p>
<p>我觉得这很有趣,因为代码不仅清晰优雅,而且性能更高。你知道吗</p>