Tính năng tương tự được tìm thấy trong vĩ mô LOOP Common Lisp của, described here by Peter Seibel:
... LOOP cung cấp hai từ khóa, ban đầu và cuối cùng , giới thiệu mã được chạy bên ngoài cơ thể chính của vòng lặp.
Sau khi ban đầu hoặc cuối cùng, các mệnh đề này bao gồm tất cả các biểu mẫu Lisp cho đến khi bắt đầu điều khoản vòng lặp tiếp theo hoặc kết thúc vòng lặp. Tất cả các hình thức ban đầu được kết hợp thành một phần mở đầu duy nhất, chạy một lần, ngay lập tức sau khi tất cả các biến vòng lặp cục bộ được khởi tạo và trước phần thân của vòng lặp. Các hình thức cuối cùng được kết hợp tương tự thành một phần kết thúc được chạy sau lần lặp cuối cùng của thân vòng lặp. Cả phần mở đầu và mã kết xuất đều có thể tham chiếu đến các biến vòng lặp cục bộ.
Đoạn mở đầu luôn chạy, ngay cả khi thân vòng lặp lặp lại 0 lần. Vòng lặp có thể trở lại mà không chạy phần kết thúc nếu bất kỳ điều nào sau đây xảy ra:
- Điều khoản trả lại sẽ thực thi.
- RETURN, HÃY TRẢ-TỪ, hay cách khác chuyển giao kiểm soát cấu trúc được gọi là từ bên trong một hình thức Lisp trong cơ thể ...
Ví dụ, một phần của một mẫu Python tìm thấy trong các câu hỏi liên quan:
for v in known_variables:
if self.bindings[v] is cell:
return v
else:
raise CannotSimplify
có thể trông như thế này:
(loop for v in known-variables
when (eq (gethash v (slot-value self bindings)) cell)
do (return v)
finally (signal cannot-simplify))
quan sát khác:
Hệ thống điều kiện chung của Lisp cũng là duy nhất. Ai đó, một lần, hỏi nó đến từ đâu và được chỉ vào Kent Pitman's paper, nơi anh ta nói đã nhận nó từ Maclisp. Tương tự, chức năng FORMAT lạ thường của Lisp dường như đến từ Multics qua Dan Weinreb.
Chủ đề chung là các tính năng ngôn ngữ không có xu hướng theo ngôn ngữ tổ tiên truyền cảm hứng nhất cho ngôn ngữ này, nhưng được thực hiện bởi các cá nhân yêu thích bất kỳ ngôn ngữ mới nào mà họ đang làm. Vì vậy, nếu bạn muốn tìm hiểu nguồn thực tế của Python for
- else
, tôi sẽ tìm người đã thêm nó và xem ngôn ngữ họ đã làm trước đó.
Vòng lặp - cấu trúc khác đã có từ ít nhất python 0.9.1 (nó có trong tệp ngữ pháp). – Seth
Cảm ơn rất nhiều. Chỉ cần kiểm tra nó được đề cập trong hướng dẫn quá. Python 0.9.0 là bản phát hành đầu tiên (tháng 2 năm 1991) và Python 0.9.1 (tháng 2 năm 1991) theo sát với "những thay đổi nhỏ chỉ" (xem http://svn.python.org/view/*checkout*/python/trunk/Misc/HISTORY). – Aristide
Sử dụng * else * sau * try * có liên quan và hữu ích tương tự. (Xem [ví dụ đơn giản] này (http://stackoverflow.com/questions/1744070/why-should-exceptions-be-used-conservatively/1744176#1744176).) –