首先你必须决定,如果你需要生成器,这也得到了改进的方法。像列表生成器“[elem for elem in somethink]”。如果您只是将列表中的值用于某些操作,则建议使用生成器。但是,如果您需要列表进行许多更改,并同时使用许多元素,则必须是列表。
(如果标准程序员使用列表的 70% 次,最好是生成器。使用更少的内存,只是很多人只是看不到其他的列表方式。不幸的是,在我们这个时代,很多人对良好的优化小便,只是为了工作.)
如果你使用列表生成器来提高回报率,让我们对 yield 人做同样的事情。无论如何,我们为 Python 编程语言中的所有操作提供了多种更优化的方法。
收益比回报快,我会证明这一点。
看看这些家伙:
data = range(1000)
def yielder():
yield from data
def appending():
L = []
app = list.append
for i in data:
app(L, i)
return L
def list_gen():
return [i for i in data]
当然追加会比其他想法慢,因为我们创建和扩展列表任何循环时间。只是循环“for”是非常不优化的,如果你可以避免这种情况,那就这样做。因为在任何一步,这个函数都会加载下一个元素并写入我们的变量,以便在内存中获取这个对象值。所以我们在任意元素处跳转,创建引用,循环扩展列表(声明的方法是极速优化器),当我们生成just return时,summary在两个列表中得到了2000个元素。
list_gen 内存较少,我们只返回元素,但像 up 一样,我们生成第二个列表。现在我们得到了两个列表,原始数据和她的副本。摘要 2000 个元素。只是我们避免了创建对变量的引用的步骤。因为我们在列表中的 gen 避免了这一步。只写元素。
yielder 使用最少的内存,因为我们刚刚从数据中得到了 yield 值。我们避免一个参考。例如:
data = range(1000)
def yielder():
yield from data
def list_gen():
return [i for i in data]
#Now we generate next reference after line [i for i in data]
for i in list_gen():
#some instruction
#This is our first reference, becouse was yield from data.
for i in yielder():
#some instruction
对某条指令仅使用一个元素,而不是全部来自列表,下一个值 yielder 将在下一个循环中返回,而不是存储所有 1000 个元素以写入参考。
srry for little dig out topic,就在我不小心被谷歌搜索翻过来的时候,其他初学者的python程序员可以看到这个废话。