假设我有以下代码:
for a in object.a_really_huge_function():
print a
为了防止a_really_huge_function
多次运行,我习惯用其他语言执行此操作:
a_list = object.a_really_huge_function()
for a in a_list:
print a
Python中有必要吗? in
之后的部分会在每个循环上运行吗?
答案 0 :(得分:7)
python解释器是你的朋友。
>>> def some_func():
... print 'in some_func'
... return [1, 2, 3, 10]
...
>>> for a in some_func():
... print a
...
in some_func
1
2
3
10
简而言之,不,它被召唤一次。
答案 1 :(得分:4)
您还可以使用生成器来避免在算法的每个步骤之后放弃控制,从而避免返回大量结果:
def a_really_huge_fuction(huge_number):
i = 0
while i < huge_number:
yield i # Relinquishes control to caller, resume execution at next line
i = i + 1
在这种情况下,函数被调用一次,但其执行时间分布在huge_number
个不同的时间。有关详细信息,请参阅yield文档。
答案 2 :(得分:1)
没有必要。
for a in object.a_really_huge_function():
只调用a_really_huge_function
一次。
将结果保存在变量中的唯一好处是,如果您在代码中的其他位置调用相同的函数。
如果函数返回一个列表,那么通过object.a_really_huge_function()
返回iterator,你可能会在内存使用方面做得更好,但你没关系。