python生成器、附加和列表理解之间的性能

2024-04-23 14:00:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在CentOS 7上使用Python2.7.5。我想看看发电机的性能差异,列表.append和列表理解。这是我的代码块:

import timeit
import random


def generate(num):
    for _ in xrange(num):
        yield random.randrange(10)


def create_list1(num):
    numbers = []
    for _ in xrange(num):
        numbers.append(random.randrange(10))
    return numbers


def create_list2(num):
    return [random.randrange(10) for _ in xrange(num)]


if __name__ == '__main__':
    print(timeit.timeit(
        'sum(generate(999999))', setup='from __main__ import generate',
        number=1))  # >>> 0.649271011353
    print(timeit.timeit(
        'sum(create_list1(999999))', setup='from __main__ import create_list1',
        number=1))  # >>> 0.667152881622
    print(timeit.timeit(
        'sum(create_list2(999999))', setup='from __main__ import create_list2',
        number=1))  # >>> 0.590311050415

我已经运行了好几次,趋势是相似的。创建列表1>;生成>;创建列表2。你知道吗

因此,我在这里找到了一些question,很好地解释了为什么列表理解“可能”比python2中的generator更有效。但这是什么呢

In Python 2 you are not going to get any additional line for a list comprehension(LC) because LC are not creating any object, but in Python 3 you will because now to make it similar to a generator expression an additional code object() is created for a LC as well.

你什么意思?那能给我们一份清单吗?为什么列表理解像“更好的版本”?你知道吗


Tags: inimport列表formaindefcreaterandom