Có sự khác biệt giữa `continue` và` pass` trong một vòng lặp for trong python không?


274

Có sự khác biệt đáng kể nào giữa hai từ khóa python continuepassnhư trong các ví dụ không

for element in some_list:
    if not element:
        pass

for element in some_list:
    if not element:
        continue

Tôi nên nhận thức về?


4
@ S. Lott: Ví dụ: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)trong tài liệu python nhầm lẫn tôi vào con đường, mà tôi không tìm thấy nó thời tiết rõ ràng nó cư xử tương đương với tiếp tục trong trường hợp này hay cái gì khác được dự định. Câu đầu tiên "Câu lệnh pass không làm gì cả." mô tả tất cả các câu trả lời cho câu hỏi của tôi, nhưng bằng cách nào đó nó không bắt mắt tôi.
Aufwind

Câu trả lời:


400

Vâng, họ làm những điều hoàn toàn khác nhau. passchỉ đơn giản là không làm gì, trong khi continuetiếp tục với vòng lặp tiếp theo. Trong ví dụ của bạn, sự khác biệt sẽ trở nên rõ ràng nếu bạn thêm một câu lệnh khác sau if: Sau khi thực hiện pass, câu lệnh tiếp theo này sẽ được thực thi. Sau continueđó, nó sẽ không.

>>> 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

7
Tôi hoàn toàn đồng ý với câu trả lời của bạn. Nhưng tôi vẫn còn thắc mắc về từ khóa pass là cần thiết? và cần thiết nhưng tại sao? Cảm ơn bạn
Hardik Gajjar

34
@HardikGajjar: Vì passtừ khóa không làm gì cả, nó chỉ hữu ích khi bạn cần một bộ công cụ thụt lề, nhưng không muốn làm gì cả. Một ví dụ phổ biến là nếu bạn muốn bỏ qua một số ngoại lệ, bạn sử dụng except SomeException: pass. Có nhiều trường hợp sử dụng khác là tốt. Bạn sẽ không thực sự cần một từ khóa cho việc này, vì bạn có thể sử dụng bất kỳ câu lệnh nào khác không làm gì cả (ví dụ: 0một câu lệnh hoàn toàn hợp lệ không có tác dụng), nhưng có một từ khóa cho phép này là cho phép bạn rõ ràng hơn về việc không muốn làm bất cứ điều gì.
Sven Marnach

@SvenMarnach có phải là nhíu mày theo phong cách để đối xử với ngoại lệ pass?
Người hâm mộ số một của Bjork

@MikePalmice Không hề.
Matt M.

73

Có một sự khác biệt. continuebuộc vòng lặp bắt đầu ở lần lặp tiếp theo trong khi passcó nghĩa là "không có mã để thực thi ở đây" và sẽ tiếp tục thông qua phần còn lại hoặc thân vòng lặp.

Chạy chúng và thấy sự khác biệt:

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

23

continue sẽ nhảy trở lại đầu vòng lặp. passsẽ tiếp tục xử lý.

nếu pass ở cuối vòng lặp, sự khác biệt là không đáng kể vì luồng sẽ chỉ quay lại đỉnh của vòng lặp.


11

Trong ví dụ của bạn, sẽ không có sự khác biệt, vì cả hai câu lệnh đều xuất hiện ở cuối vòng lặp. passchỉ đơn giản là một trình giữ chỗ, trong đó nó không làm gì cả (nó chuyển thực thi sang câu lệnh tiếp theo). continuemặt khác, có một mục đích xác định: nó bảo vòng lặp tiếp tục như thể nó vừa được khởi động lại.

for element in some_list:
    if not element:
        pass
    print element  

rất khác với

for element in some_list:
    if not element:
        continue
    print element

6

Có một sự khác biệt giữa chúng,
continuebỏ qua lần lặp hiện tại của vòng lặp và thực hiện lần lặp tiếp theo.
passKhông lam gi cả. Đó là một giữ chỗ tuyên bố trống.
Tôi muốn cung cấp cho bạn một ví dụ, sẽ làm rõ điều này tốt hơn.

>>> 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

5

Có một sự khác biệt. Continuethực sự bỏ qua phần còn lại của vòng lặp hiện tại của vòng lặp (trở lại từ đầu). Passlà một tuyên bố trống không làm gì.

Xem tài liệu trăn


4

Trong những ví dụ đó, không. Nếu câu lệnh không phải là cuối cùng trong vòng lặp thì chúng có hiệu ứng rất khác nhau.


3

Sự khác biệt giữa vượt qua và tiếp tục trong một vòng lặp for:

Vậy tại sao lại vượt qua trong trăn?

Nếu bạn muốn tạo một lớp trống, phương thức hoặc khối.

Ví dụ:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

không có 'vượt qua' trong các ví dụ trên sẽ ném IndentationError.


1
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."

Đầu ra là

>>> This statement is from pass.

Một lần nữa, hãy chạy cùng mã với những thay đổi nhỏ.

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."

Đầu ra là -

>>> 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 không làm gì cả. Tính toán không bị ảnh hưởng. Nhưng tiếp tục quay trở lại đầu vòng để mua với tính toán tiếp theo.


3
Sự khác biệt đặc biệt với các câu trả lời khác đã có sẵn là gì?
BHUVANESH MOHANKUMAR

1

Hãy xem xét nó theo cách này:

Vượt qua: Python hoạt động hoàn toàn trên thụt lề! Không có dấu ngoặc nhọn trống, không giống như các ngôn ngữ khác.

Vì vậy, nếu bạn không muốn làm gì trong trường hợp điều kiện là đúng thì không có lựa chọn nào khác ngoài pass.

Tiếp tục: Điều này chỉ hữu ích trong trường hợp các vòng lặp. Trong trường hợp, đối với một phạm vi các giá trị, bạn không muốn thực thi các câu lệnh còn lại của vòng lặp sau khi điều kiện đó đúng với đường chuyền cụ thể đó, thì bạn sẽ phải tiếp tục sử dụng.


Vì vậy, nếu bạn không muốn làm gì trong trường hợp điều kiện là đúng thì không có lựa chọn nào khác ngoài pass -> điều này không chính xác, xem ví dụ bình luận của Sven Marnach ở trên.
patrick

1
@patrick Xin lỗi, nhưng anh ấy đúng. Trong trường hợp, ví dụ, một biến có thể là cả float và int và bạn muốn thực hiện một thao tác trên tất cả các int, thì bạn có thể chỉ cần sử dụng một câu lệnh if để kiểm tra float, sử dụng một passcâu lệnh if Truevà thực hiện các hoạt động nếu có False. Điều này cho phép quét hiệu quả các danh sách đa mục đích.
1313e

0

passcó thể được sử dụng trong các tình huống khi bạn cần một số hàm, lớp hoặc vòng lặp trống để triển khai trong tương lai và không có yêu cầu thực thi bất kỳ mã nào.
continueđược sử dụng trong các tình huống khi không khi một số điều kiện đã gặp trong một vòng lặp và bạn cần bỏ qua bước lặp hiện tại và chuyển sang điều kiện tiếp theo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.