2011-08-11 25 views
5

Şu anda Lynda Python öğreticisinden geçiyorum ve jeneratörler bölümünde şu kodu görüyorum:Python: if-else arasında döngü için, bu nasıl/neden çalışır?

def isprime(n): 
    if n == 1: 
     return False 
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    else: 
     return True 

İlk önce onu yakalamadım ama koddan geçerken farkettim ki else anahtar kelimesi, aynı girinti seviyesinde bir if ile tüm arasında bir for-loop'a sahipti. Benim için sürpriz, kod sadece çalışır, aslında doğru davranışı üretir.

Basit bir print("Hello, World") ifadesiyle for-loop değiştireceksem, o zaman beklenen bir yorumlayıcı hatası alıyorum.

Bu sözdiziminin ardında yatan sebep neydi ve neden print() gibi değil, döngü ifadeleriyle çalışıyor?

Referans olması için kodun aşağıdaki gibi yazılmasını beklerdim:

def isprime(n): 
    if n == 1: 
     return False  
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    return True 
+0

kuyu bu benim için normal görünüyor .. aslında beklediğiniz şekilde eşdeğerdir (ikinci kod bloğunda) – wim

cevap

8

döngü normalde tamamlandı eğer bir for: bloktan sonra bir else: blok sadece çalışır. Döngünün dışında break varsa, çalışmaz. Bu durumda, fark etmez çünkü döngüden asla kopmazsınız; Bitmeden önce return veya normal olarak tamamlamanıza izin verirsiniz.

2

Bu davranışın nedeni, python for loop'un aslında başka bir ifade tarafından izlenebilir olmasıdır. Else şubesi, olağan döngü kaplaması durumunda yürütülür ve 'un kesilmesinden sonra atlanır.