4.2 for 语句

Python 中的 for 语句和你在 C 或者 Pascal 中习惯的用法可能不太一样。Python 语言不会总是遍历或迭代一个等差数列 (如Pascal),也不会让用户可以同时定义迭代步骤和终止条件 (如 C)。Python 的 for 语句遍历任何一个序列 (列表或字符串) 的所有元素,这样它们就可以在序列中出现了。举个栗子 (没有一语双关):

  1. >>> # Measure some strings:
  2. ... words = ['cat', 'window', 'defenestrate']
  3. >>> for w in words:
  4. ... print(w, len(w))
  5. ...
  6. cat 3
  7. window 6
  8. defenestrate 12

如果你需要在内部修改正在遍历的序列 (比如要复制所选的元素),建议你首先复制一份。遍历一个序列不会隐式的复制一份。slice 符号在这里就很方便:

  1. >>> for w in words[:]: # Loop over a slice copy of the entire list.
  2. ... if len(w) > 6:
  3. ... words.insert(0, w)
  4. ...
  5. >>> words
  6. ['defenestrate', 'cat', 'window', 'defenestrate']

如果在这个例子中使用了 for w in words,就会一遍又一遍的插入 defenestrate, 从而尝试着创建一个无穷的列表。