2011-08-11 6 views
5

Tôi hiện đang trải qua các hướng dẫn Lynda Python và trong phần nói về máy phát điện tôi thấy đoạn mã sau:Python: cho vòng lặp giữa if-else, how/why this this works?

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

Tôi không bắt nó lúc đầu, nhưng như tôi đã đi qua đoạn code tôi nhận thấy rằng từ khóa else có toàn bộ vòng lặp giữa nó và một số if ở cùng mức thụt đầu dòng. Trước sự ngạc nhiên của tôi, mã không chỉ chạy, nó thực sự tạo ra hành vi đúng.

Nếu tôi thay thế vòng lặp for bằng tuyên bố đơn giản print("Hello, World"), chỉ khi đó tôi mới nhận được lỗi thông dịch dự kiến.

Lý do đằng sau cú pháp này là gì và tại sao nó lại hoạt động với các câu lệnh vòng lặp nhưng không hoạt động với những người khác như print()?

Để tham khảo, tôi dự kiến ​​sẽ có các mã được viết như sau:

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

điều này có vẻ bình thường đối với tôi .. trên thực tế nó tương đương với cách bạn mong đợi (trong khối mã thứ hai), bởi vì ngắt không bao giờ được gọi trong vòng lặp – wim

Trả lời

8

Một else: khối sau khi một khối for: chỉ chạy nếu vòng lặp hoàn thành bình thường. Nếu bạn break ra khỏi vòng lặp, nó sẽ không chạy. Trong trường hợp này, điều này không có sự khác biệt bởi vì bạn không bao giờ thoát khỏi vòng lặp; bạn return trước khi nó kết thúc hoặc bạn để cho nó hoàn thành bình thường.

2

Lý do cho hành vi này là trong python for loop thực sự có thể được theo sau bởi câu lệnh khác. Chi nhánh khác được thực hiện trong trường hợp của thông thường kết thúc vòng lặp và bị bỏ qua sau vi phạm.