我可以在两个python包之间使用生成器吗?

时间:2016-10-05 11:42:46

标签: list python-2.7 flask generator

我有一个Python(Flask)项目,其中包含许多包,每个包都是Flask蓝图。目前,我有一个函数返回一个包中的项目列表(它被挂钩),并在另一个包中调用(触发)此函数。该项目还使用钩子和触发器在不同的包之间进行通信,并且当项目第一次启动时,所有内容都在内存中加载。在这种情况下是否可以使用发电机?如果是这样,在这种特定情况下,最好使用生成器而不是列表吗?提前谢谢!

这是我所拥有的简化示例。在这种情况下是否可以使 function1 成为生成器?

package1.module1:

def function1():
    # some_list might be retrieved from a database
    retrun some_list

package2.module2:

from package1.module1 import function1

def func1():
    list_from_module_one = function1()
    # do something with the result
    # Here I have 2 cases, I can either return "list_from_module_one" as it is 
    # or do something with each item of this list and then return something that is 
    # not directly related to this list
    return some_data

def func2():
    # Second function that calls function1 from package1
    list_from_module_one = function1()
    # do something with the result
    return some_data

1 个答案:

答案 0 :(得分:1)

生成器非常适用于您在飞行中生成结果因此节省了所需的内存,如果列表是预先确定的,那么它已经加载到内存中并且您只是以延迟的方式使用它。因此,发电机只会增加复杂性。此外,它取决于您正在处理的列表的大小,如果规模很小,那么性能明智无关紧要。

如果您动态编写列表,当然使用生成器是明智之举,它会因为延迟生成值而提高性能。

根据我的理解,您的问题中有很多内容尚不清楚,您需要在项目的多个位置使用生成器。所以你想要数据同步吗?在这种情况下,您必须确保每次都应该使用相同的生成器对象。

generators的本教程给出了一个很好的解释。

请妥善阐述您的问题,以获得更准确的答案,尤其是使用代码段。