Python:'for ... in'语句评估行为

时间:2014-01-15 01:48:30

标签: python python-2.7 for-loop

我在python中有以下代码示例:

def get_objects():
    print 'Called get_objects'
    return [1, 2, 3, 4, 5]       


def main():
    for i in get_objects():
        print i

main()

输出如下:

Called get_objects
1
2
3
4
5

所以我的问题是为什么get_objects()只调用一次?为什么每次尝试都不会获取数据?

1 个答案:

答案 0 :(得分:6)

因为这正是for循环在Python中的工作原理。在循环开始之前,in运算符右侧的表达式(在计算时必须返回可迭代的表达式)仅在一次中进行计算。然后,for循环遍历该评估返回的迭代。

以下是docs *:

的摘录
  

for语句用于迭代序列的元素   (例如字符串,元组或列表)或其他可迭代对象:

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]
     

表达式列表评估一次;它应该产生一个可迭代的   对象


*注意:我添加了粗体。