2013-10-11 4 views
5

मैं आज एक गणित की परीक्षा थी और परीक्षण पर अतिरिक्त क्रेडिट प्रश्नों में से एकपरिवर्तनीय दायरे के बारे में?

product = 1 
for i in range(1,7,2): 
    print i 
    product = product * i 
print i 
print product 

था हम पाश जो आसान था के कदम की सूची करने वाले थे; लेकिन यह मुझे सोच गया, यह कार्यक्रम क्यों चलाता है? दूसरा print i मेरे लिए जगह से बाहर लगता है। मुझे लगता है कि i केवल लूप के लिए मौजूद है और फिर नष्ट हो जाता है, इसलिए जब आप दूसरे print i पर कॉल करते हैं तो कोई चर i नहीं है और आपको कोई त्रुटि मिलती है।

क्यों i वैश्विक चर रहे हैं?

+0

'product * = i' का उपयोग करें) – alexvassel

+0

मेरे पास होगा, यह मेरे शिक्षक का परीक्षण था। यह अलग गणित है इसलिए बहुत से लोगों को प्रोग्रामिंग अनुभव नहीं है, इसलिए मैं इस समय पर बहुत अधिक पायथन/प्रोग्रामिंग मुहावरे पेश नहीं करने के अपने कारण को समझ सकता हूं। – spitfiredd

उत्तर

9

शैतान एक ब्लॉक अजगर कार्यक्रम टेक्स्ट का एक हिस्सा है कि एक इकाई के रूप में क्रियान्वित किया जाता है

Naming and binding

विवरण

में है। निम्नलिखित ब्लॉक हैं: एक मॉड्यूल, एक फ़ंक्शन बॉडी, और एक वर्ग परिभाषा।

या सरल शब्दों में, एक for loop एक ब्लॉक

एक गुंजाइश एक ब्लॉक के भीतर एक नाम की दृश्यता को परिभाषित करता है नहीं है। यदि किसी स्थानीय चर को किसी ब्लॉक में परिभाषित किया गया है, तो इसके दायरे में उस ब्लॉक को शामिल किया गया है। यदि परिभाषा फ़ंक्शन ब्लॉक में होती है, तो दायरा परिभाषित करने के भीतर किसी भी ब्लॉक तक फैली हुई है, जब तक कि एक निहित ब्लॉक नाम के लिए एक अलग बाध्यकारी प्रस्तुत नहीं करता है।

इसलिए किसी भी चर परिभाषित module ब्लॉक के दायरे, function, या class परिभाषा के अंत तक परिभाषा के बिंदु से दिख रहा है।

मैं वैश्विक चर क्यों बना रहा हूं?

नामकरण की भाषा से, मैं i एक वैश्विक चर फोन करेगा, यदि आपके प्रकाश डाला कोड मॉड्यूल के बजाय एक परिभाषित समारोह का हिस्सा है।

1

पायथन में ब्लॉक स्कोप नहीं है। किसी फ़ंक्शन में परिभाषित कोई भी चर केवल उस बिंदु से दिखाई देता है, फ़ंक्शन के अंत तक।

+1

-1: 'पायथन में ब्लॉक स्कोप नहीं है।' .. यह सही नहीं है। पायथन में, एक ब्लॉक स्कोप एक मॉड्यूल, फ़ंक्शन या क्लास परिभाषा है। – Abhijit

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