2016-09-04 13 views
6

मैंने पढ़ा है कि दुभाषिया लाइन द्वारा कोड लाइन चलाता है और त्रुटि की रिपोर्ट एक ही समय में किसी भी और आगे निष्पादन करना बंद कर दे रहे हैं। तो अजगर में, फ़ाइल ex1.py पर विचारपाइथन दुभाषिया कोड कोड को निम्नलिखित कोड में कैसे चलाता है?

print "Hello world" 
12variable = 'bye' 
print 12variable 

अब दुभाषिया के काम के अनुसार, दुभाषिया पहली पंक्ति चल पाएंगे यानी यह हैलो प्रिंट दुनिया पहले और उसके बाद अगली पंक्ति में सिंटेक्स त्रुटि दिखाने (लाइन काम करने वाली लाइन)। इसलिए उम्मीद उत्पादन होता है:

Hello world 
12variable = 'bye' 
     ^
SyntaxError: invalid syntax 

लेकिन वास्तविक उत्पादन होता है -

12variable = 'bye' 
     ^
SyntaxError: invalid syntax 

यह पहली बार में Hello World क्यों मुद्रण नहीं है?

+0

आपने इसे कहाँ पढ़ा? –

+0

मैंने शुरुआत में अपने कंप्यूटर मूलभूत पुस्तक में इसके बारे में पढ़ा है। – dlp96

उत्तर

5

यह कैसे आप अजगर दुभाषिया चलाने पर निर्भर करता है। यदि आप इसे एक पूर्ण स्रोत फ़ाइल देते हैं, तो यह पहले पूरी फ़ाइल को पार्स करेगा और इसे किसी भी निर्देश निष्पादन से पहले बाइटकोड में परिवर्तित करेगा। लेकिन अगर आप यह लाइन द्वारा लाइन फ़ीड, उसे पार्स जाएगा और गुट द्वारा कोड गुट निष्पादित करें:

  • python script.py: पार्स पूर्ण फ़ाइल
  • python < script.py: पार्स और गुट द्वारा निष्पादित

उत्तरार्द्ध आमतौर पर जिस तरह से आप इसे इंटरैक्टिव रूप से या जीयूआई खोल के माध्यम से idle का उपयोग करते हैं।

अजगर कोड यह बाइट कोड स्थिति में नहीं है के बाद लाइन द्वारा लाइन चलाता है:

2

क्योंकि दुभाषिये की अपनी समझ को दोषपूर्ण है। हालांकि व्यवहार के लिए यह संभव है कि आप त्रुटियों के सबसेट के लिए होने का वर्णन कर रहे हैं, यह कई (अधिकांश?) त्रुटियों के लिए सामान्य मामला नहीं है।

दुभाषिया का निर्माण कर सकते हैं कि यह क्या सोचता है कि एक वैध कार्यक्रम है, लेकिन रन टाइम पर एक त्रुटि आप तब क्या होगा का वर्णन कर रहे हैं।

के बाद से मामला आप पर ओर इशारा करते हैं एक सिंटैक्स त्रुटि है कि एक वैध कार्यक्रम व्यवहार निर्माण किया जा रहा से बचाता है के रूप में आप इसे देख रहा है।

+0

इसका क्या अर्थ है कि दुभाषिया लाइन लाइन कोड को निष्पादित करता है? इसका मतलब यह है कि यह एक समय में एक पंक्ति को पार करता है और रेखा को निष्पादित करता है या यह एक समय में एक पंक्ति को पार करता है और यदि कोई वाक्यविन्यास त्रुटि नहीं है, तो यह अगली पंक्ति में पार्स करने के लिए आगे बढ़ती है और फिर पूरी फ़ाइल को पार्स करने के बाद, यह निष्पादित होती है बाइटकोड ने मुहैया कराई कि किसी भी लाइन में कोई त्रुटि नहीं है? – dlp96

+1

यह पूरे कार्यक्रम को पार करता है। अगर यह एक त्रुटि से मुकाबला करता है जो वैध बाइटकोड बनाया जा रहा है तो यह उस चरण में एक त्रुटि फेंकता है और कार्यक्रम की कोई भी पंक्ति कभी नहीं चलती है। यदि यह निर्माण करने का प्रबंधन करता है जो यह मानता है कि कार्यक्रम का वैध बाइटकोड संस्करण है तो यह प्रोग्राम चलाता है। यदि रनटाइम त्रुटि का सामना करना पड़ता है तो यह एक त्रुटि फेंकता है और त्रुटि का सामना करने वाली रेखा पर प्रोग्राम निष्पादित करना बंद कर देता है। – jwpfox

5

यह एक मिथक है कि अजगर एक पूरी तरह से व्याख्या की भाषा है। जब सीपीथॉन एक स्क्रिप्ट चलाता है तो स्रोत कोड पार्स किया जाता है (यह वह जगह है जहां यह सिंटैक्स त्रुटियों को पकड़ लेगा), और बाइटकोड में संकलित (कभी-कभी इन्हें आपकी निर्देशिका में .pyc फ़ाइलों के रूप में कैश किया जाता है) कुछ भी निष्पादित होने से पहले। इस संबंध में पायथन सभी मूल रूप से जावा या सी # से अलग नहीं हैं, इसके अलावा यह किसी भी अनुकूलन करने में अधिक समय नहीं लगाता है, और मेरा मानना ​​है कि बाइटकोड को एक समय में एक निर्देश का अर्थ दिया गया है, मशीन कोड पर JITed होने के बजाय (जब तक आप पीईपीई की तरह कुछ उपयोग कर रहे हैं)।

0

मैं इसे इस तरह से समझते हैं।

इस चीज़ और संकलन (सी ++ जैसी अन्य भाषाओं में) के बीच का अंतर यह है कि जब भी आप स्क्रिप्ट चलाते हैं तो आपको व्याख्या की प्रक्रिया को करना होता है।

पायथन दुभाषिया प्रत्येक बार जब आप स्क्रिप्ट चलाते हैं तो कोड को समझता है।

सी ++ में आप प्रोग्राम संकलित करते हैं और जब तक आप सिस्टम को बदलना नहीं चाहते हैं तब तक इसे फिर से संकलित किए बिना इसे निष्पादित कर सकते हैं।

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