มีความแตกต่างอย่างมีนัยสำคัญระหว่างสองคำหลามcontinue
และpass
เหมือนในตัวอย่าง
for element in some_list:
if not element:
pass
และ
for element in some_list:
if not element:
continue
ฉันควรระวัง?
มีความแตกต่างอย่างมีนัยสำคัญระหว่างสองคำหลามcontinue
และpass
เหมือนในตัวอย่าง
for element in some_list:
if not element:
pass
และ
for element in some_list:
if not element:
continue
ฉันควรระวัง?
คำตอบ:
ใช่พวกเขาทำสิ่งต่าง ๆ โดยสิ้นเชิง pass
ไม่ทำอะไรเลยในขณะที่ยังcontinue
วนซ้ำถัดไป ในตัวอย่างของคุณความแตกต่างจะชัดเจนหากคุณเพิ่มคำสั่งอื่นหลังจากif
: หลังจากดำเนินการpass
คำสั่งเพิ่มเติมนี้จะถูกดำเนินการ หลังจากนั้นcontinue
ก็จะไม่
>>> a = [0, 1, 2]
>>> for element in a:
... if not element:
... pass
... print element
...
0
1
2
>>> for element in a:
... if not element:
... continue
... print element
...
1
2
pass
คำหลักไม่ได้ทำอะไรเลยมันมีประโยชน์เฉพาะเมื่อคุณต้องมีชุดข้อความที่เยื้องเข้ามา แต่ไม่ต้องการทำอะไรเลย except SomeException: pass
ตัวอย่างที่พบบ่อยคือถ้าคุณต้องการที่จะไม่สนใจข้อยกเว้นบางอย่างที่คุณใช้ มีกรณีการใช้งานอื่น ๆ อีกมากมายเช่นกัน คุณไม่จำเป็นต้องใช้คำหลักอย่างเคร่งครัดเนื่องจากคุณสามารถใช้คำสั่งอื่นใดที่ไม่ได้ทำอะไรเลย (เช่น0
เป็นคำสั่งที่ถูกต้องสมบูรณ์แบบที่ไม่มีผลกระทบ) แต่การมีคำหลักสำหรับเรื่องนี้ทำให้คุณสามารถ ชัดเจนมากขึ้นเกี่ยวกับการไม่ต้องการทำอะไร
pass
?
ใช่มีความแตกต่าง continue
บังคับให้ลูปเริ่มต้นที่การวนซ้ำครั้งถัดไปในขณะที่pass
หมายความว่า "ไม่มีรหัสที่จะดำเนินการที่นี่" และจะดำเนินการต่อผ่านส่วนที่เหลือหรือลูปบอดี้
เรียกใช้เหล่านี้และดูความแตกต่าง:
for element in some_list:
if not element:
pass
print 1 # will print after pass
for element in some_list:
if not element:
continue
print 1 # will not print after continue
continue
จะกระโดดกลับไปที่ด้านบนของลูป pass
จะดำเนินการต่อ
ถ้า pass อยู่ที่ท้ายของ loop ความแตกต่างนั้นเล็กน้อยเนื่องจาก flow จะกลับไปที่ด้านบนของ loop อย่างไรก็ตาม
ในตัวอย่างของคุณจะไม่มีความแตกต่างเนื่องจากทั้งสองข้อความปรากฏที่ท้ายลูป pass
เป็นเพียงตัวยึดตำแหน่งโดยที่มันไม่ทำอะไรเลย (มันผ่านการดำเนินการกับคำสั่งถัดไป) continue
ในทางกลับกันมีวัตถุประสงค์ที่ชัดเจน: มันบอกลูปเพื่อดำเนินการต่อราวกับว่าเพิ่งเพิ่งเริ่มต้นใหม่
for element in some_list:
if not element:
pass
print element
แตกต่างจาก
for element in some_list:
if not element:
continue
print element
มีความแตกต่างระหว่างพวกเขา continue
ข้ามการทำซ้ำปัจจุบันของวงและดำเนินการทำซ้ำต่อไป pass
ไม่ทำอะไรเลย มันเป็นตัวยึดคำสั่งที่ว่างเปล่า
ฉันอยากจะยกตัวอย่างให้คุณซึ่งจะอธิบายให้ดีกว่านี้
>>> for element in some_list:
... if element == 1:
... print "Pass executed"
... pass
... print element
...
0
Pass executed
1
2
>>> for element in some_list:
... if element == 1:
... print "Continue executed"
... continue
... print element
...
0
Continue executed
2
ใช่มีความแตกต่าง Continue
จริงข้ามส่วนที่เหลือของการวนซ้ำปัจจุบันของลูป (กลับไปที่จุดเริ่มต้น) Pass
เป็นข้อความว่างเปล่าที่ไม่ทำอะไรเลย
ในตัวอย่างเหล่านั้นไม่มี หากคำสั่งไม่ได้อยู่ในลูปสุดท้ายพวกเขาจะมีเอฟเฟกต์ที่แตกต่างกันมาก
ความแตกต่างระหว่าง pass และการวนรอบต่อไป:
เหตุใดจึงผ่านไปในงูหลาม
ถ้าคุณต้องการสร้างคลาสว่างวิธีการหรือบล็อก
ตัวอย่าง:
class MyException(Exception):
pass
try:
1/0
except:
pass
โดยไม่มี 'pass' ในตัวอย่างด้านบนจะทำให้ IndentationError
x = [1,2,3,4]
for i in x:
if i==2:
pass #Pass actually does nothing. It continues to execute statements below it.
print "This statement is from pass."
for i in x:
if i==2:
continue #Continue gets back to top of the loop.And statements below continue are executed.
print "This statement is from continue."
ผลลัพธ์คือ
>>> This statement is from pass.
อีกครั้งให้เรียกใช้รหัสเดียวกันกับการเปลี่ยนแปลงเล็กน้อย
x = [1,2,3,4]
for i in x:
if i==2:
pass #Pass actually does nothing. It continues to execute statements below it.
print "This statement is from pass."
for i in x:
if i==2:
continue #Continue gets back to top of the loop.And statements below continue are executed.
print "This statement is from continue."
ผลลัพธ์คือ -
>>> This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from continue.
This statement is from continue.
This statement is from continue.
ผ่านไม่ได้ทำอะไรเลย การคำนวณไม่ได้รับผลกระทบ แต่กลับไปที่ด้านบนสุดของลูปเพื่อดำเนินการคำนวณต่อไป
พิจารณาด้วยวิธีนี้:
ผ่าน:หลามทำงานอย่างหมดจดในการเยื้อง! ไม่มีวงเล็บปีกกาว่างเปล่าซึ่งแตกต่างจากภาษาอื่น ๆ
ดังนั้นหากคุณต้องการทำอะไรในกรณีที่เงื่อนไขเป็นจริงไม่มีตัวเลือกอื่นนอกจากรหัสผ่าน
ดำเนินการต่อ:สิ่งนี้มีประโยชน์เฉพาะในกรณีของลูป ในกรณีสำหรับช่วงของค่าคุณไม่ต้องการดำเนินการคำสั่งที่เหลือของลูปหลังจากเงื่อนไขนั้นเป็นจริงสำหรับการส่งผ่านนั้นคุณจะต้องใช้ดำเนินการต่อ
pass
คำสั่ง if และดำเนินการถ้ามันเป็นTrue
False
ทำให้สามารถสแกนรายการอเนกประสงค์ได้อย่างมีประสิทธิภาพ
pass
สามารถใช้ในสถานการณ์เมื่อคุณต้องการฟังก์ชั่นที่ว่างเปล่าบางคลาสหรือลูปสำหรับการใช้งานในอนาคตและไม่มีความต้องการของการดำเนินการรหัสใด ๆ
continue
จะใช้ในสถานการณ์เมื่อไม่มีเมื่อเงื่อนไขบางอย่างเกิดขึ้นภายในลูปและคุณต้องข้ามการวนซ้ำปัจจุบันและเลื่อนไปยังอันถัดไป
while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)
ในเอกสารหลามทำให้ฉันสับสนในทางที่ฉันไม่พบว่ามันชัดเจนว่าสภาพอากาศที่มันทำงานได้เทียบเท่ากับการดำเนินการต่อในกรณีนี้หรือสิ่งอื่นที่ตั้งใจ ประโยคแรก"คำสั่ง pass ไม่ได้ทำอะไรเลย" อธิบายลักษณะทั้งหมดของคำตอบสำหรับคำถามของฉัน แต่อย่างใดมันก็ไม่ได้ตาของฉัน