为什么`lst in lst:`工作?

时间:2015-06-23 13:07:31

标签: python python-2.7

以下代码

lst = ['foo', 'bar', 'baz']
for lst in lst:
    print lst

给我这个输出

foo
bar
baz

我希望错误或以下输出:

['foo', 'bar', 'baz']
['foo', 'bar', 'baz']
['foo', 'bar', 'baz']

上面的代码是错误的,应该是

lst = ['foo', 'bar', 'baz']
for lst_element in lst:
    print lst_element

为什么python会产生预期的输出?

1 个答案:

答案 0 :(得分:3)

在Python中,当你说

for identifier in iterable:

首先从 iterable 创建一个迭代器。因此,实际对象不会在循环中使用。然后迭代迭代器,当前值将绑定到名称​​ identifier

引用official documentation of for

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

表达式列表评估一次;它应该产生一个可迭代的对象。 expression_list 的结果创建了一个迭代器。然后,对于迭代器提供的每个项,按升序索引的顺序执行一次该套件。 依次使用分配的标准规则将每个项目分配到目标列表,然后执行套件。

在您的示例中,在最后一次迭代之后,lst将引用baz,而不是列表本身,因为for循环已将名称lst绑定到在最后一次迭代中baz