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

Kha*_*lla 2 python for-loop python-2.7

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

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


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

main()
Run Code Online (Sandbox Code Playgroud)

输出如下:

Called get_objects
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

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

iCo*_*dez 7

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

以下是文档*的摘录:

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

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]
Run Code Online (Sandbox Code Playgroud)

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


*注意:我添加了粗体.

  • @Phoenix - 这是一个文档链接:http://docs.python.org/3/reference/compound_stmts.html#the-for-statement (2认同)
  • @rmunn - 优秀的链接.谢谢.:) (2认同)