पायथन 3 में `raw_input ()` और `इनपुट ()` के बीच अंतर क्या है?


362

पायथन 3 में raw_input()और क्या अंतर है input()?


3
आप ऐसा प्रोग्राम कैसे बनाते हैं जो पायथन 2 और पायथन 3 दोनों को संगत बनाता है?
सोलोमन उको

2
ऐसा करने के लिए आप नाम त्रुटियों को सेट inputकरने raw_inputऔर अनदेखा करने का प्रयास करते हैं।
सोलोमन उको

3
अजगर 2 और 3 संगतता के लिए 'छह' पुस्तकालय देखें।
जैक हैमन

जवाबों:


418

अंतर यह है कि raw_input()पायथन 3.x में मौजूद नहीं है, जबकि input()करता है। असल में, पुराने raw_input()का नाम बदल दिया गया है input(), और पुराना input()चला गया है, लेकिन आसानी से उपयोग करके नकली किया जा सकता है eval(input())। (याद रखें कि eval()बुराई है। यदि संभव हो तो अपने इनपुट को पार्स करने के सुरक्षित तरीकों का उपयोग करने का प्रयास करें।)


93
"क्या अंतर है raw_input...?" - "अंतर यह है कि नहीं है raw_input।" ... काफी अंतर है, मैं कहूँगा!
ivan_pozdeev 21

9
पायथन 2 में, मुझे लगता है कि वे प्रोग्रामर मानते थे कि वास्तव में उपयोगकर्ता इनपुट के रूप में एक कमांड के रूप में "निष्पादित" करना चाहता था, क्योंकि शुरू में (मुझे लगता है) उपयोगकर्ता से इनपुट का अनुरोध केवल उसी के लिए हो सकता है। लेकिन जब उन्हें एहसास हुआ कि प्रोग्रामर भी "कच्चा" इनपुट प्राप्त करना चाहते हैं, तो उन्होंने "raw_input" नामक एक अन्य फ़ंक्शन डिज़ाइन किया। पायथन 3 में उन्होंने देखा कि कौन सी बेवकूफी थी और मूल इनपुट डिफ़ॉल्ट निष्पादन को हटा दिया गया था, केवल एक साधारण फ़ंक्शन की उपज।
जेसी रोकोन्डे

1
Repl.it, Py3.5.1 को चलाने पर एक कीवर्ड के रूप में raw_input () है।
OldBunny2800

2
यह कहने की आवश्यकता है कि eval(और exec) आम तौर पर बचा जाना चाहिए क्योंकि वे सुरक्षा जोखिम हो सकते हैं। विवरण के लिए, कृपया देखें कि वास्तव में एसओ वयोवृद्ध नेड बैचेल्ड द्वारा एवल खतरनाक है। और निश्चित रूप से यह सलाह पुराने पाइथन 2 पर भी लागू होती है input
PM 2Ring

1
@ PM2Ring मैंने जवाब में एक चेतावनी जोड़ी। बेशक दोनों के लिए वैध उपयोग के मामले हैं eval()और exec(), लेकिन आपको यह समझने की आवश्यकता है कि इसका उपयोग eval()करने का निर्णय लेने से पहले आपको इसका उपयोग क्यों नहीं करना चाहिए ।
स्वेन मार्नाच

192

पायथन 2 में , raw_input()एक स्ट्रिंग लौटाता है, और input()इनपुट को पायथन अभिव्यक्ति के रूप में चलाने की कोशिश करता है।

चूंकि एक स्ट्रिंग प्राप्त करना हमेशा लगभग वही होता था जो आप चाहते थे, पायथन 3 ऐसा करता है input()। जैसा कि स्वेन कहते हैं, यदि आप कभी भी पुराना व्यवहार चाहते हैं, तो eval(input())काम करता है।


7
आपको जोड़ना चाहिए कि पायथन 3 में नहीं है raw_input()
मार्टिन थोमा

अजगर अभिव्यक्ति के रूप में चल इनपुट का उपयोग क्या है?
अक्षय विजय जैन ५

1
@ अक्षयविजयैन, शायद यह संख्या दर्ज करने का इरादा था। लेकिन यह पूरी तरह से असुरक्षित है।
मारसॉफ्ट

112

अजगर 2:

  • raw_input() ठीक वही है जो उपयोगकर्ता टाइप करता है और इसे स्ट्रिंग के रूप में वापस भेजता है।

  • input()पहले लेता है raw_input()और फिर उस eval()पर भी प्रदर्शन करता है ।

मुख्य अंतर यह है कि input()एक कृत्रिम रूप से सही अजगर बयान की अपेक्षा raw_input()करता है जहां नहीं होता है।

अजगर 3:

  • raw_input()input()अब इसका नाम बदलकर input()सटीक स्ट्रिंग दिया गया।
  • पुराना input()हटा दिया गया।

यदि आप पुराने का उपयोग करना चाहते हैं input(), तो इसका मतलब है कि आपको एक अजगर इनपुट के रूप में एक उपयोगकर्ता इनपुट का मूल्यांकन करने की आवश्यकता है, आपको इसे मैन्युअल रूप से उपयोग करके करना होगा eval(input())


26

पायथन 3 में, raw_input()मौजूद नहीं है जो पहले ही स्वेन द्वारा उल्लिखित था।

पायथन 2 में, input()फ़ंक्शन आपके इनपुट का मूल्यांकन करता है।

उदाहरण:

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

ऊपर के उदाहरण में, पायथन 2.x एक स्ट्रिंग के बजाय एक चर के रूप में कठोर का मूल्यांकन करने की कोशिश कर रहा है। उससे बचने के लिए, हम अपने इनपुट के चारों ओर दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं, जैसे "हर्शा":

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

कच्चे इनपुट()

Raw_input () `फ़ंक्शन का मूल्यांकन नहीं करता है, यह सिर्फ आपके द्वारा दर्ज किए गए कुछ को पढ़ेगा।

उदाहरण:

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

उदाहरण:

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

उपरोक्त उदाहरण में, मैं केवल evalफ़ंक्शन के साथ उपयोगकर्ता इनपुट का मूल्यांकन करने की कोशिश कर रहा था ।


7

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

जबकि input()दूसरी तरफ उपयोगकर्ता द्वारा दर्ज किए गए डेटा को समझने की कोशिश करता है। तो इनपुट helloworldभी त्रुटि ' helloworld is undefined' के रूप में दिखाएगा ।

अंत में, अजगर 2 के लिए, एक स्ट्रिंग में प्रवेश करने के लिए भी आपको इसे ' helloworld' की तरह दर्ज करने की आवश्यकता होती है जो कि स्ट्रिंग का उपयोग करने के लिए अजगर में उपयोग की जाने वाली सामान्य संरचना है।


3

यदि आप यह सुनिश्चित करना चाहते हैं कि आपका कोड python2 और python3 के साथ चल रहा है, तो अपनी स्क्रिप्ट में फ़ंक्शन इनपुट () का उपयोग करें और इसे अपनी स्क्रिप्ट की शुरुआत में जोड़ें:

from sys import version_info
if version_info.major == 3:
    pass
elif version_info.major == 2:
    try:
        input = raw_input
    except NameError:
        pass
else:
    print ("Unknown python version - input function not safe")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.