for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
Trong trường hợp chung, khi bạn có nhiều cấp độ lặp và break
không hoạt động cho bạn (vì bạn muốn tiếp tục một trong các vòng trên, không phải ở cấp trên bên trên hiện tại), bạn có thể thực hiện một trong các cách sau
Tái cấu trúc các vòng lặp bạn muốn thoát khỏi thành một hàm
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Nhược điểm là bạn có thể cần chuyển đến hàm mới đó một số biến, trước đây là trong phạm vi. Bạn có thể chuyển chúng dưới dạng tham số, biến chúng thành các biến đối tượng trên một đối tượng (tạo một đối tượng mới chỉ cho hàm này, nếu nó có ý nghĩa) hoặc biến toàn cục, singletons, bất cứ điều gì (ehm, ehm).
Hoặc bạn có thể định nghĩa inner
là một hàm lồng nhau và để nó chỉ nắm bắt những gì nó cần (có thể chậm hơn?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Sử dụng ngoại lệ
Về mặt triết học, đây là những gì ngoại lệ dành cho, phá vỡ dòng chương trình thông qua các khối xây dựng lập trình có cấu trúc (nếu, trong, trong khi) khi cần thiết.
Ưu điểm là bạn không phải chia một đoạn mã thành nhiều phần. Điều này là tốt nếu nó là một loại tính toán mà bạn đang thiết kế trong khi viết nó bằng Python. Giới thiệu trừu tượng ở điểm đầu này có thể làm bạn chậm lại.
Điều tồi tệ với cách tiếp cận này là các tác giả phiên dịch / biên dịch thường cho rằng các ngoại lệ là đặc biệt và tối ưu hóa cho chúng theo đó.
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
Tạo một lớp ngoại lệ đặc biệt cho việc này, để bạn không có nguy cơ vô tình làm im lặng một số ngoại lệ khác.
Một cái gì đó khác hoàn toàn
Tôi chắc chắn vẫn còn những giải pháp khác.