以下代码
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
会产生预期的输出?
答案 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
。