대부분의 다른 절차적 프로그래밍 언어와 마찬가지로, 파이썬에는 for와 while이라는 두 가지 순환(loop) 방식이 있으며, 이들의 의미는 대부분의 비슷한 언어들과 상당히 비슷합니다. 하지만 파이썬은 구상 컬렉션(concrete collection)에 더해, 다른 많은 언어가 다루지 않는 느긋한 반복 가능 객체(lazy iterable)를 포함한 반복 가능 객체 순환을 특히 중요하게 여깁니다. 이 장에 나오는 많은 잘못은 다른 프로그래밍 언어에서는 ‘최선의 관행’에 해당하지만, 이를 파이썬으로 변환할 때 너무 직접적으로 코드를 옮기면 형식상 문제가 생기거나 또는 불필요하게 취약해집니다.
파이썬은 기술적으로 재귀(recursion)를 허용하는데, 이 역시 순환의 일종으로 간주할 수 있습니다. 그러나 파이썬은 재귀의 깊이에 제한이 있으며 꼬리 재귀 최적화(tail-call optimization)1를 지원하지 않습니다. 재귀는 해결책을 찾을 때 자연스럽게 세분화되는 문제에는 매우 유용한 수단이지만, 파이썬에서 비슷한 작업을 연속적으로 구성하기에 좋은 접근 방식은 아닙니다.
이 장에서 다루는 잘못 중 재귀를 구체적으로 다루는 것은 없습니다. 다만 Lisp 계열 언어, ML 계열 언어, Haskell, Rust, Lua, Scala, Erlang 등에서는 재귀를 사용하는 것이 최선일 수 있지만, 파이썬에서는 반대로 나쁜 습관에 해당할 수도 있다는 것을 이해해야 합니다.