Python:使用理解函数与独立函数形成列表的成本

Python:使用理解函数与独立函数形成列表的成本,python,list,list-comprehension,cost-management,Python,List,List Comprehension,Cost Management,在python中,制作一个具有理解力的列表还是使用一个独立的函数,哪个成本更高 看来我没有找到以前问过同样问题的帖子。虽然其他答案详细介绍了python的字节和内部工作方式,这确实很有帮助,但我觉得可视化图形有助于显示出一种持续的趋势 我还没有对python的底层工作有足够的了解,所以这些答案对我来说有点陌生,难以理解 我目前是CS专业的本科生,我一直对python的强大功能感到惊讶。我最近做了一个小实验,测试用理解和独立函数形成列表的成本。例如: def make_list_of_size(n

在python中,制作一个具有理解力的列表还是使用一个独立的函数,哪个成本更高

看来我没有找到以前问过同样问题的帖子。虽然其他答案详细介绍了python的字节和内部工作方式,这确实很有帮助,但我觉得可视化图形有助于显示出一种持续的趋势


我还没有对python的底层工作有足够的了解,所以这些答案对我来说有点陌生,难以理解

我目前是CS专业的本科生,我一直对python的强大功能感到惊讶。我最近做了一个小实验,测试用理解和独立函数形成列表的成本。例如:

def make_list_of_size(n):
    retList = []
    for i in range(n):
        retList.append(0)
    return retList
创建包含零的大小为n的列表

众所周知,这个函数是O(n)。我想探索以下方面的发展:

def comprehension(n):
    return [0 for i in range(n)]
这也构成了同样的清单

让我们一起探索

这是我用来计时的代码,请注意函数调用的顺序(我是以哪种方式首先列出的)。我先是用一个独立的函数,然后是理解。我还没有学会如何在这个实验中关闭垃圾收集,因此,当垃圾收集开始时,会产生一些固有的测量错误

'''
file: listComp.py
purpose: to test the cost of making a list with comprehension
versus a standalone function
'''
import time as T
def get_overhead(n):
    tic = T.time()
    for i in range(n):
        pass
    toc = T.time()
    return toc - tic


def make_list_of_size(n):
    aList = [] #<-- O(1)
    for i in range(n): #<-- O(n)
        aList.append(n) #<-- O(1)
    return aList #<-- O(1)

def comprehension(n):
    return [n for i in range(n)] #<-- O(?)

def do_test(size_i,size_f,niter,file):
    delta = 100
    size = size_i
    while size <= size_f:
        overhead = get_overhead(niter)

        reg_tic = T.time()
        for i in range(niter):
            reg_list = make_list_of_size(size)
        reg_toc = T.time()

        comp_tic = T.time()
        for i in range(niter):
            comp_list = comprehension(size)
        comp_toc = T.time()

        #--------------------

        reg_cost_per_iter = (reg_toc - reg_tic - overhead)/niter
        comp_cost_pet_iter = (comp_toc - comp_tic - overhead)/niter

        file.write(str(size)+","+str(reg_cost_per_iter)+
            ","+str(comp_cost_pet_iter)+"\n")

        print("SIZE: "+str(size)+ " REG_COST = "+str(reg_cost_per_iter)+
            " COMP_COST = "+str(comp_cost_pet_iter))

        if size == 10*delta:
            delta *= 10
        size += delta

def main():
    fname = input()
    file = open(fname,'w')
    do_test(100,1000000,2500,file)
    file.close()

main()
“”
文件:listComp.py
目的:用理解力测试制作清单的成本
与独立函数相比
'''
导入时间为T
def get_开销(n):
tic=T.时间()
对于范围(n)中的i:
通过
toc=T.时间()
返回toc-tic
def制作列表大小(n):

aList=[]#既然您对性能感兴趣,并且可能对大型数据结构感兴趣,那么也来看看生成器函数。基本上与理解的语法相同,但也可以。这里有一个有趣的讨论列表理解效率的文章,可能会重复。谢谢你分享这个博客