我有一个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
答案 0 :(得分:1)
生成器非常适用于您在飞行中生成结果因此节省了所需的内存,如果列表是预先确定的,那么它已经加载到内存中并且您只是以延迟的方式使用它。因此,发电机只会增加复杂性。此外,它取决于您正在处理的列表的大小,如果规模很小,那么性能明智无关紧要。
如果您动态编写列表,当然使用生成器是明智之举,它会因为延迟生成值而提高性能。
根据我的理解,您的问题中有很多内容尚不清楚,您需要在项目的多个位置使用生成器。所以你想要数据同步吗?在这种情况下,您必须确保每次都应该使用相同的生成器对象。
generators的本教程给出了一个很好的解释。
请妥善阐述您的问题,以获得更准确的答案,尤其是使用代码段。