違いは何であるraw_input()
とinput()
はPython 3では?
input
しraw_input
て無視します。
違いは何であるraw_input()
とinput()
はPython 3では?
input
しraw_input
て無視します。
回答:
違いはraw_input()
、Python 3.xには存在しないが、存在することですinput()
。実際、古いraw_input()
名前はに変更されinput()
、古いものinput()
はなくなりましたが、を使用して簡単にシミュレートできますeval(input())
。(それeval()
は悪であることを忘れないでください。可能であれば、入力を解析するより安全な方法を使用するようにしてください。)
raw_input
... の違いは何ですか?」-「違いはないということraw_input
です。」...かなりの違いがあると思います!
eval
(およびexec
)は回避する必要があると言う必要があります。詳細については、SOのベテランNed BatchelderによるEvalの危険性をご覧ください。そしてもちろん、そのアドバイスは古いPython 2にも適用されinput
ます。
eval()
との両方に有効な使用例exec()
がありますが、使用eval()
することを決定する前に、使用しない理由を理解する必要があります。
Python 2ではraw_input()
、文字列を返しinput()
、入力をPython式として実行しようとします。
ほとんどの場合、文字列を取得することが目的どおりだったので、Python 3はでそれを行いinput()
ます。スヴェンが言うように、もしあなたが古い振る舞いを望むなら、うまくいきますeval(input())
。
raw_input()
。
raw_input()
ユーザーが入力した内容を正確に取り、文字列として返します。
input()
最初にraw_input()
それを取り、次にそれに対しても実行eval()
します。
主な違いはinput()
、構文的に正しいpythonステートメントを期待しているところにraw_input()
あります。
raw_input()
に名前が変更されたinput()
ためinput()
、正確な文字列を返すようになりました。input()
が削除されました。古いを使用input()
する場合、つまりユーザー入力をpythonステートメントとして評価する必要がある場合は、を使用して手動で実行する必要がありeval(input())
ます。
Python 3では、raw_input()
Svenによってすでに言及されたものは存在しません。
Python 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
上記の例では、Python 2.xはharshaを文字列ではなく変数として評価しようとしています。これを回避するには、 "harsha"のように入力を二重引用符で囲みます。
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input()
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
関数でユーザー入力を評価しようとしていました。
私はpython 2ユーザーのために皆から提供された説明にもう少し詳細を追加したいと思います。raw_input()
これで、ユーザーが文字列として入力するデータを評価します。これは、Pythonが入力されたデータを再度理解しようとはしないことを意味します。考慮されるのは、入力されたデータが実際の文字列であるかintであるかどうかに関係なく、文字列であることだけです。
一方input()
、ユーザーが入力したデータを理解しようとします。そのため、入力のようなhelloworld
場合でも、エラーが ' helloworld is undefined
'と表示されます。
結論として、python 2の場合、文字列も入力するhelloworld
には、Pythonで文字列を使用するために使用される一般的な構造である「」のように入力する必要があります。
コードがpython2およびpython3で実行されていることを確認したい場合は、スクリプトで関数input()を使用し、これをスクリプトの開始に追加します。
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")