2010-09-27 15 views
7

के बीच मतभेद एक ट्यूटोरियल में, मैंने पढ़ा कि input और raw_input के बीच कोई अंतर है। मैंने पाया कि उन्होंने पाइथन 3.0 में इन कार्यों के व्यवहार को बदल दिया है। नया व्यवहार क्या है?`इनपुट` और` raw_input`

और क्यों अजगर सांत्वना दुभाषिया इस

x = input() 

एक त्रुटि भेजता है लेकिन अगर मैं इसे एक file.py में डाल दिया और इसे चलाने, यह नहीं है में?

उत्तर

14

अजगर 2.x में, raw_input() एक स्ट्रिंग वापस आती है और input() निष्पादन संदर्भ में इनपुट जिसमें यह

>>> x = input() 
"hello" 
>>> y = input() 
x + " world" 
>>> y 
'hello world' 

अजगर 3.x में कहा जाता है, input खत्म कर दिया गया है और समारोह में पहले से ज्ञात का मूल्यांकन करता है raw_input अब input है। इसलिए यदि आप पुरानी कार्यक्षमता चाहते हैं तो आपको मैन्युअल रूप से compile और eval पर कॉल करना होगा।

python2.x     python3.x 

raw_input() --------------> input()    
input() -------------------> eval(input())  

3.x में, ऊपर सत्र तो आप शायद interpretor में एक त्रुटि मिल रहे थे, क्योंकि आप अपने इनपुट के आसपास उद्धरण डाल नहीं कर रहे थे इस

>>> x = eval(input()) 
'hello' 
>>> y = eval(input()) 
x + ' world' 
>>> y 
'hello world' 
>>> 

की तरह हो जाता है। यह आवश्यक है क्योंकि इसका मूल्यांकन किया जाता है। आपको नाम त्रुटि कहां मिल रही है?

+0

के रूप में उत्पादन क्या यहाँ पर जा रहा होगा मैं करने की कोशिश की अपने कंसोल पर लाइनें (3.x) और इसका अर्थ x = इनपुट() "हैलो" <- मैं इसे पूछे जाने पर कंसोल पर टाइप करता हूं) एक्स + "दुनिया" वाई 'x + "दुनिया" क्यों? एक्स एक स्ट्रिंग –

+0

त्रुटि मैं >>> एक्स = इनपुट() Traceback (सबसे हाल कॉल पिछले) हो रही थी में अनुवादित किया गया नहीं: फ़ाइल "", लाइन 1, EOFError में: EOF जब एक लाइन पढ़ने –

+0

@ गुइलर्मो, मैंने दिखाया गया दुभाषिया अनुभाग 2.x के लिए है। मैं 3.x पर गड़बड़ कर चुका हूं (मैंने इसके साथ बहुत कुछ नहीं खेला है) इसलिए मैंने अपने जवाब के उस हिस्से को हटा दिया। – aaronasterling

3

इनपुट() बनाम raw_input()

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

इसके अलावा इनपुट(), उपयोगकर्ता त्रुटियों से सुरक्षित नहीं है! यह इनपुट के रूप में एक वैध अजगर अभिव्यक्ति अपेक्षा करता है; यदि इनपुट वाक्य रचना मान्य नहीं है, एक सिंटैक्स त्रुटि बढ़ा दी जाएगी।

3

इसका सरल:

  1. raw_input() रिटर्न स्ट्रिंग को महत्व देता
  2. जबकि input() वापसी पूर्णांक मूल्यों

उदाहरण के लिए:

1.

x = raw_input("Enter some value = ") 
print x 

आउटपुट:

Enter some value = 123 
'123' 

2।

y = input("Enter some value = ") 
print y 

आउटपुट:

Enter some value = 123 
123 

इसलिए अगर हम x + x = प्रदर्शन यह आउटपुट के रूप में 123123

जबकि अगर हम y + y = प्रदर्शन यह 246

+0

शायद पाइथन 2.x पर, लेकिन पायथन 3.x पर नहीं। पाइथन 3.x में इनपुट() हमेशा एक स्ट्रिंग लौटता है। इसके अलावा, python 3 से raw_input() हटा दिया गया है –

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