Python 什么';有收益和无收益的循环数据是不同的

Python 什么';有收益和无收益的循环数据是不同的,python,Python,我有两种方法来循环数据,一种是使用for循环,另一种是使用yield,我想知道有什么区别 For循环(获取100000个数据) 产量(每次获取1000个数据,然后查询数据库100次) 在功能上,它们是一样的 主要区别在于,在第二种情况下,在不重复SQL语句的情况下,拥有几个不同的“do something”块非常容易。在第一种情况下,“do something”是硬编码的。它取决于数据库实现的工作方式。在这种情况下,它完全取决于您在func中执行的操作。如果您一次生成完整的列表,那么使用yi

我有两种方法来循环数据,一种是使用for循环,另一种是使用yield,我想知道有什么区别

  • For循环(获取100000个数据)

  • 产量(每次获取1000个数据,然后查询数据库100次)


  • 在功能上,它们是一样的


    主要区别在于,在第二种情况下,在不重复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