Python'da bir for döngüsünde "devam" ve "geç" arasında bir fark var mı?


274

İki piton anahtar kelimeler arasında anlamlı bir fark var mıdır continueve passörneklerde gibi

for element in some_list:
    if not element:
        pass

ve

for element in some_list:
    if not element:
        continue

Farkında olmam gerekir mi?


4
S.Lott @: Örneğin: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)in piton docs ben başka düşünülmüştü bu durumda falan devam eşdeğer davranır net hava bulamadık, bir şekilde beni karıştı. İlk cümle "Pass deyimi hiçbir şey yapmaz." sorumun tüm cevaplarını karakterize ediyor, ama bir şekilde gözüme çarpmadı.
Aufwind

Yanıtlar:


400

Evet, tamamen farklı şeyler yapıyorlar. passbir continuesonraki döngü yinelemesiyle devam ederken, hiçbir şey yapmaz . Örneğinizde, aşağıdakilerden sonra başka bir ifade eklerseniz fark görünür hale gelir if: Yürütüldükten sonra passbu ek ifade yürütülür. Sonra continue, olmazdı.

>>> 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
tamamen cevabınıza katılıyorum. ama geçiş anahtar kelime ile ilgili hala soru var gerekli mi? ve gerekli ama neden? Thank You
Hardik Gajjar

34
@HardikGajjar: passAnahtar kelime hiçbir şey yapmadığından, yalnızca sözdizimsel olarak girintili bir pakete ihtiyacınız olduğunda, ancak hiçbir şey yapmak istemediğinizde kullanışlıdır. Yaygın bir örnek, bazı istisnaları yoksaymak istiyorsanız, kullanırsınız except SomeException: pass. Başka birçok kullanım durumu da var. Bunun için kesinlikle bir anahtar kelimeye ihtiyacınız yoktur, çünkü hiçbir şey yapmayan başka bir ifadeyi kullanabilirsiniz (örneğin 0, etkisi olmayan mükemmel geçerli bir ifadedir), ancak bunun için bir anahtar kelimeye sahip olmanız, hiçbir şey yapmak istememe konusunda daha açık.
Sven Marnach

@SvenMarnach istisnaları tedavi etmek için stilistik olarak kaşlarını çattı passmı?
Bjorks bir numaralı fan

@MikePalmice Hiç de değil.
Matt M.

73

Evet, bir fark var. continuedöngüyü bir sonraki yinelemede başlamaya zorlarkenpass , "burada yürütülecek kod yoktur" anlamına gelir ve geri kalanı veya döngü gövdesi boyunca devam eder.

Bunları çalıştırın ve farkı görün:

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 döngünün tepesine atlar. passişleme devam edecek.

döngü ilmeğin sonunda ise, akış yine de ilmeğin tepesine geri döneceğinden fark göz ardı edilebilir.


11

Örneğinizde, her iki ifade de döngünün sonunda göründüğünden, hiçbir fark olmayacaktır. passbasitçe bir yer tutucudur, çünkü hiçbir şey yapmaz ( yürütmeyi bir sonraki ifadeye geçirir ). continueÖte yandan, kesin bir amacı vardır: döngüye yeni başlamış gibi devam etmesini söyler .

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

çok farklı

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

6

Aralarında bir fark vardır,
continuedöngünün geçerli yinelemesini atlar ve bir sonraki yinelemeyi yürütür.
passhiç birşey yapmıyor. Boş bir ifade yer tutucusudur.
Size bunu daha iyi netleştirecek bir örnek vermeyi tercih ederim.

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

Evet, bir fark var. Continueaslında döngünün mevcut yinelemesinin geri kalanını atlar (başa dönerek). Passhiçbir şey yapmayan boş bir ifadedir.

Python belgelerine bakın



3

For döngüsünde pass ve continue arasındaki fark:

Peki neden python'a geçelim?

Boş bir sınıf, yöntem veya blok oluşturmak istiyorsanız.

Örnekler:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

yukarıdaki örneklerde 'pass' olmadan IndentationError atar.


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

Çıktı

>>> This statement is from pass.

Yine, küçük değişiklikler ile aynı kodu çalıştırın.

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

Çıktı -

>>> 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 hiçbir şey yapmaz. Hesaplama etkilenmez. Ancak devam et, bir sonraki hesaplama ile ilerlemek için döngünün başına dönüyor.


3
Zaten mevcut olan diğer cevaplarla özel fark nedir?
BHUVANESH MOHANKUMAR

1

Şu şekilde düşünün:

Pass: Python tamamen girinti üzerinde çalışıyor! Diğer dillerden farklı olarak boş kıvırcık ayraçlar yoktur.

Bu nedenle, bir koşulun doğru olması durumunda hiçbir şey yapmak istemiyorsanız, geçmek dışında bir seçenek yoktur.

Devam et: Bu yalnızca döngüler olması durumunda kullanışlıdır. Bir değer aralığı için, söz konusu geçiş için bu koşul geçerli olduktan sonra döngünün kalan ifadelerini yürütmek istemezseniz, devam'ı kullanmanız gerekir.


Bu nedenle, bir koşulun doğru olması durumunda hiçbir şey yapmak istemiyorsanız, geçişten başka bir seçenek yoktur -> bu doğru değildir, bkz. Örneğin Sven Marnach'ın yukarıdaki yorumu.
patrick

1
@patrick Üzgünüm, ama haklı. Örneğin, bir değişkenin hem kayan nokta hem de int olabileceği ve tüm ints üzerinde işlem gerçekleştirmek istediğinizde, o zaman kayan nokta olup olmadığını denetleyen bir if-ifadesi kullanabilirsiniz pass; Trueve varsa işlemi gerçekleştirin False. Bu, çok amaçlı listelerin verimli bir şekilde taranmasını sağlar.
1313e

0

pass gelecekteki uygulamalar için bazı boş işlevlere, sınıflara veya döngülere ihtiyaç duyduğunuzda senaryolarda kullanılabilir ve herhangi bir kod yürütmeye gerek yoktur.
continuebir döngü içinde bazı koşullar karşılanmadığında ve geçerli yinelemeyi atlayıp bir sonrakine geçmeniz gerektiğinde senaryolarda kullanılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.