2011-08-11 6 views
5

मैं वर्तमान में लिंडा अजगर ट्यूटोरियल के माध्यम से और जनरेटर मैं निम्नलिखित कोड को देखने पर खंड में जा रहा हूँ:पाइथन: यदि और अन्य के बीच लूप के लिए, यह कैसे काम करता है?

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

मैं पहली बार में इसे पकड़ नहीं किया था, लेकिन जैसा कि मैंने कोड मैंने देखा के माध्यम से जा रहा था कि else कीवर्ड के बीच एक संपूर्ण फॉर-लूप था और उसी इंडेंटेशन स्तर पर if था। मेरे आश्चर्य के लिए, कोड न केवल चलता है, यह वास्तव में सही व्यवहार पैदा करता है।

यदि मैं फॉर-लूप को एक साधारण print("Hello, World") कथन के साथ प्रतिस्थापित करना था, तो केवल मुझे अपेक्षित दुभाषिया त्रुटि मिलती है।

इस वाक्यविन्यास के पीछे तर्क क्या था, और यह लूप स्टेटमेंट के साथ क्यों काम करता है लेकिन अन्य print() जैसे नहीं?

संदर्भ के लिए, मैं अपेक्षा की होगी कोड निम्नलिखित की तरह लिखा होना चाहिए:

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

अच्छी तरह से यह सब मेरे लिए सामान्य दिखता है .. वास्तव में यह आपके द्वारा अपेक्षित तरीके (दूसरे कोड ब्लॉक में) के बराबर है, क्योंकि लूप को कभी भी लूप में नहीं बुलाया जाता है – wim

उत्तर

8

एक for: ब्लॉक के बाद एक else: ब्लॉक केवल तभी पाश सामान्य रूप से पूरा चलाता है। यदि आप break लूप से बाहर हैं, तो यह नहीं चलेगा। इस मामले में, इससे कोई फर्क नहीं पड़ता क्योंकि आप कभी भी लूप से बाहर नहीं निकलते; इससे पहले कि आप return समाप्त हो जाएं या आप इसे सामान्य रूप से पूरा कर दें।

2

इस व्यवहार का कारण यह है कि पाइथन for loop में वास्तव में अन्य कथन का पालन किया जा सकता है। Else शाखा सामान्य लूप खत्म होने के मामले में निष्पादित की जाती है और तोड़ने के बाद छोड़ दी जाती है।

संबंधित मुद्दे