Python 什么';有收益和无收益的循环数据是不同的
我有两种方法来循环数据,一种是使用for循环,另一种是使用yield,我想知道有什么区别Python 什么';有收益和无收益的循环数据是不同的,python,Python,我有两种方法来循环数据,一种是使用for循环,另一种是使用yield,我想知道有什么区别 For循环(获取100000个数据) 产量(每次获取1000个数据,然后查询数据库100次) 在功能上,它们是一样的 主要区别在于,在第二种情况下,在不重复SQL语句的情况下,拥有几个不同的“do something”块非常容易。在第一种情况下,“do something”是硬编码的。它取决于数据库实现的工作方式。在这种情况下,它完全取决于您在func中执行的操作。如果您一次生成完整的列表,那么使用yi
在功能上,它们是一样的
主要区别在于,在第二种情况下,在不重复SQL语句的情况下,拥有几个不同的“do something”块非常容易。在第一种情况下,“do something”是硬编码的。它取决于数据库实现的工作方式。在这种情况下,它完全取决于您在func中执行的操作。如果您一次生成完整的列表,那么使用yield-over-loop没有任何优势。如果您一个接一个地生成它,那么yield将有所帮助。您是在问yield的作用,还是在问拆分大型数据库查询是否更有效?
date
与data
不同?func()
应该做什么?如果date=data
和中的select行应该表示数据库读取,并且.count是描述返回多少结果的有效属性,那么循环将无限地生成整个数据库读取(如果它不是空的)。您的意思是:这两种方式之间没有区别吗?thanks@Veelian:在功能上,不。在风格上,是的。它们在功能上不一样,生成器与迭代器不一样。@dnozay:这是一条相当奇怪的推理路线。如果X不相同,Y并不意味着X和Y不能用来做相同的事情。@NPE,递归和迭代也不是一回事,即使人们用它来计算斐波那契数。
data='select 100000 data from database'
for d in date:
do something with d
def func():
data='select 1000 data from database'
while date.count>0:
yield data
data = func()
for d in data:
do something with d