for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
ในกรณีทั่วไปเมื่อคุณมีการวนซ้ำหลายระดับและ break
ไม่ได้ผลสำหรับคุณ (เพราะคุณต้องการต่อหนึ่งในลูปด้านบนไม่ใช่อันที่อยู่เหนือระดับปัจจุบัน) คุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้
ปรับโครงสร้างลูปที่คุณต้องการหลบหนีให้เป็นฟังก์ชัน
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
ข้อเสียคือคุณอาจต้องส่งผ่านไปยังฟังก์ชันใหม่บางตัวแปรซึ่งก่อนหน้านี้อยู่ในขอบเขต คุณสามารถส่งผ่านเป็นพารามิเตอร์ทำให้เป็นตัวแปรอินสแตนซ์บนออบเจ็กต์ (สร้างออบเจ็กต์ใหม่สำหรับฟังก์ชันนี้เท่านั้นหากเหมาะสม) หรือตัวแปรส่วนกลาง singletons อะไรก็ได้ (ehm, ehm)
หรือคุณสามารถกำหนดinner
เป็นฟังก์ชันซ้อนกันแล้วปล่อยให้มันจับสิ่งที่ต้องการ (อาจช้ากว่านี้?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
ใช้ข้อยกเว้น
ตามหลักปรัชญานี่คือข้อยกเว้นสำหรับการทำลายขั้นตอนของโปรแกรมผ่านโครงสร้างการเขียนโปรแกรมที่มีโครงสร้าง (if, for, while) เมื่อจำเป็น
ข้อดีคือคุณไม่ต้องแบ่งรหัสชิ้นเดียวออกเป็นหลายส่วน นี่เป็นสิ่งที่ดีถ้าเป็นการคำนวณบางอย่างที่คุณกำลังออกแบบในขณะที่เขียนใน Python การแนะนำ abstractions ในช่วงแรกนี้อาจทำให้คุณทำงานช้าลง
สิ่งที่ไม่ดีในแนวทางนี้คือผู้เขียนล่าม / คอมไพเลอร์มักจะคิดว่าข้อยกเว้นพิเศษและปรับให้เหมาะสมสำหรับพวกเขาตามนั้น
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
สร้างคลาสข้อยกเว้นพิเศษสำหรับสิ่งนี้เพื่อที่คุณจะได้ไม่เสี่ยงต่อการปิดเสียงข้อยกเว้นอื่น ๆ โดยไม่ได้ตั้งใจ
อย่างอื่นทั้งหมด
ฉันแน่ใจว่ายังมีทางแก้ไขอื่น ๆ