Yanıtlar:
İşte basit bir örnek:
for letter in 'Django':
if letter == 'D':
continue
print("Current Letter: " + letter)
Çıktı:
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
Döngünün bir sonraki yinelemesine devam eder.
continue
işe yaradığını gösterir , ancak yapabildiğinizde aşırı kullanışlı değildirif letter != 'D': print 'Current Letter:', letter
Eğer "işe" geçmeden önce yerine getirilmesi gereken birçok hükümler olan döngülerde devam etmeyi seviyorum. Yani böyle bir kod yerine:
for x, y in zip(a, b):
if x > y:
z = calculate_z(x, y)
if y - z < x:
y = min(y, z)
if x ** 2 - y ** 2 > 0:
lots()
of()
code()
here()
Ben böyle kodu almak:
for x, y in zip(a, b):
if x <= y:
continue
z = calculate_z(x, y)
if y - z >= x:
continue
y = min(y, z)
if x ** 2 - y ** 2 <= 0:
continue
lots()
of()
code()
here()
Bu şekilde çok derin iç içe kod kaçının. Ayrıca, önce en sık meydana gelen vakaları ortadan kaldırarak döngüyü optimize etmek kolaydır, böylece başka bir showtopper olmadığında sadece seyrek ama önemli vakalarla (örneğin bölen 0'dır) uğraşmam gerekir.
continue
Bu şekilde kullanmak , kullanmaya benzer GOTO
. Ancak, bu doğru kullanım yoludur GOTO
.
Genellikle devam etmenin gerekli / yararlı olduğu durum, döngüde kalan kodu atlamak ve yinelemeye devam etmek istediğiniz durumdur.
Her zaman aynı mantığı sağlamak için if ifadelerini kullanabildiğiniz için gerçekten gerekli olduğuna inanmıyorum, ancak kodun okunabilirliğini artırmak için yararlı olabilir.
if <condition>: continue
etmeden kullanmak if not <condition>: ...
, aksi takdirde yazılmamışsa gerekli olacak bir girinti düzeyinden kaçınır.
continue
ifade kullandığımızda , esasen bir koşullu test bölümünden atlıyoruz ve döngü yinelemesinin devam etmesine izin veriyoruz sonraki yinelemeye? Bunun nasıl kullanacağımdan daha iyi olacağı belli değil else
. Sadece geliştirilmiş okunabilirlik ve çalışma zamanı performansı ile mi ilgili?
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
devam etmek son derece önemli bir kontrol ifadesidir. Yukarıdaki kod, sıfıra bölünmenin sonucunun önlenebileceği tipik bir uygulamayı gösterir. Programlardan çıktıyı depolamam gerektiğinde sık sık kullanıyorum, ancak program çöktüğünde çıktıyı saklamak istemiyorum. Yukarıdaki örneği test etmek için, son ifadeyi print 1 / float (x) ile değiştirin veya bir kesir olduğunda sıfırlar elde edersiniz, çünkü randint bir tamsayı döndürür. Anlaşılır olması için atladım.
Bazı insanlar okunabilirlik hakkında "Oh, okunabilirliğe o kadar yardımcı olmuyor, kimin umurunda?"
Ana koddan önce bir kontrole ihtiyacınız olduğunu varsayalım:
if precondition_fails(message): continue
''' main code here '''
Bunu , ana kod yazıldıktan sonra yine de bu kodu değiştirmeden yapabileceğinizi unutmayın . Kodu ayırırsanız, ana kodda boşluk değişikliği olmadığından yalnızca "devam" ile eklenen satır vurgulanır.
Üretim kodunun bir kahvaltısını yapmanız gerekip gerekmediğini düşünün. Kodu incelediğinizde bunun tek değişiklik olduğunu görmek kolaydır. Ana kodu if / else içinde kaydırmaya başlarsanız, özellikle Python'da tehlikeli olan boşluk değişikliklerini yok saymazsanız diff yeni girilen kodu vurgulayacaktır. Kısa sürede kod yayınlamanız gereken durumda değilseniz, bunu tam olarak takdir edemeyebilirsiniz.
def filter_out_colors(elements):
colors = ['red', 'green']
result = []
for element in elements:
if element in colors:
continue # skip the element
# You can do whatever here
result.append(element)
return result
>>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
['lemon', 'orange', 'pear']
continue
ifade buraya ne ekliyor ? Kullanarak ortadan kaldırılabilir element not in colors
ve kod da okunabilir.
Diyelim ki 3 ve 5'in katları olmayan tüm sayıları yazdırmak istiyoruz
for x in range(0, 101):
if x % 3 ==0 or x % 5 == 0:
continue
#no more code is executed, we go to the next number
print x
if x %3 == 0 or x % 5 == 0:
, pass
, else:
,print x
continue
. Benim sonucum hiç bir ihtiyaç olmadığı , ancak bazı durumlarda (bunun gibi) kod kullanılarak daha okunabilir continue
. Bu çok iyi bir örnek.
IF'lerle yapılabileceğinden kesinlikle gerekli değildir, ancak çalışma zamanında daha okunabilir ve daha az pahalıdır.
Veri bazı gereksinimleri karşılamıyorsa, bir döngüde bir yineleme atlamak için kullanın:
# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]
for time in commit_times:
hour = time[0]
minutes = time[1]
# If the hour is not between 0 and 24
# and the minutes not between 0 and 59 then we know something is wrong.
# Then we don't want to use this value,
# we skip directly to the next iteration in the loop.
if not (0 <= hour <= 24 and 0 <= minutes <= 59):
continue
# From here you know the time format in the tuples is reliable.
# Apply some logic based on time.
print("Someone commited at {h}:{m}".format(h=hour, m=minutes))
Çıktı:
Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45
Gördüğünüz gibi, yanlış değer continue
ifadeden sonra bunu yapmadı .
if
yalnızca continue
tüm kod bir blokta bulunuyorsa ne yapabilir? bloğun continue
dışında bile olan kodu atlar if
.
Örneğin, bir değişkenin değerine bağlı olarak farklı şeyler yapmak istiyorsanız:
my_var = 1
for items in range(0,100):
if my_var < 10:
continue
elif my_var == 10:
print("hit")
elif my_var > 10:
print("passed")
my_var = my_var + 1
Yukarıdaki örnekte break
tercüman kullanırsam döngü atlanır. Ancak bununla continue
birlikte yalnızca if-elif ifadelerini atlar ve doğrudan döngünün bir sonraki öğesine gider.
my_var
bir 0
.
continue
.
elif
olmalıdır if
. Kod, ne yaptığınızı bildiğiniz görünümü vermez.
continue
bir sonraki yinelemeye kadar döngüdeki kodun geri kalanını atlar