Arasındaki fark nedir raw_input()
ve input()
Python 3'te?
input
için raw_input
ad hatalarını ayarlamaya ve yok saymaya çalışın .
Arasındaki fark nedir raw_input()
ve input()
Python 3'te?
input
için raw_input
ad hatalarını ayarlamaya ve yok saymaya çalışın .
Yanıtlar:
Fark, raw_input()
Python 3.x'te input()
bulunmamasıdır. Aslında, eski raw_input()
olarak yeniden adlandırıldı input()
ve eski input()
gitti, ancak kullanılarak kolayca simüle edilebilir eval(input())
. (Bunun eval()
kötü olduğunu unutmayın . Mümkünse girişinizi ayrıştırmak için daha güvenli yollar kullanmaya çalışın.)
raw_input
... arasındaki fark nedir ?" - "Aradaki fark, hayır raw_input
." ... Oldukça büyük bir fark, diyebilirim!
eval
(ve exec
onlar bir güvenlik riski olabilir çünkü) genellikle kaçınılmalıdır. Ayrıntılar için, bkz. Eval gerçekten SO kıdemli gazisi Ned Batchelder tarafından tehlikelidir . Ve elbette bu tavsiye eski Python 2 için de geçerlidir input
.
eval()
ve exec()
ancak kullanmaya eval()
karar vermeden önce neden kullanmamanız gerektiğini anlamanız gerekir .
Python 2'de , raw_input()
bir dize döndürür ve input()
girdiyi Python ifadesi olarak çalıştırmayı dener.
Bir dize almak neredeyse her zaman istediğiniz şey olduğundan, Python 3 bunu yapar input()
. Sven'in dediği gibi, eğer eski davranışı istiyorsanız, eval(input())
işe yarıyor.
raw_input()
.
raw_input()
kullanıcının tam olarak yazdıklarını alır ve bir dize olarak geri gönderir.
input()
önce alır raw_input()
ve sonra eval()
üzerinde de gerçekleştirir .
Temel fark, input()
sözdizimsel olarak doğru bir python deyimi beklemesidir.raw_input()
olması.
raw_input()
input()
şimdi yeniden adlandırıldıinput()
tam dizeyi döndürüyor.input()
kaldırıldı.Eskiyi kullanmak istiyorsanız input()
, yani bir kullanıcı girişini python deyimi olarak değerlendirmeniz gerekiyorsa, bunu kullanarak manuel olarak yapmanız gerekir eval(input())
.
Python 3'te, raw_input()
Sven tarafından daha önce sözü edilen mevcut değil.
Python 2'de input()
işlev girişinizi değerlendirir.
Misal:
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
Yukarıdaki örnekte, Python 2.x harsha'yı bir dize yerine bir değişken olarak değerlendirmeye çalışmaktadır. Bundan kaçınmak için, girdimizin etrafında "harsha" gibi çift tırnak kullanabilirsiniz:
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
Ham girdi()
Raw_input () `işlevi değerlendirilmez, girdiğiniz her şeyi okuyacaktır.
Misal:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Misal:
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
Yukarıdaki örnekte, sadece eval
fonksiyon ile kullanıcı girişini değerlendirmeye çalışıyordum .
Python 2 kullanıcıları için herkes tarafından sağlanan açıklamaya biraz daha detay eklemek istiyorum . raw_input()
, artık kullanıcının dize olarak girdiği verileri değerlendirdiğini bilirsiniz. Bu, python'un girilen verileri tekrar anlamaya çalışmadığı anlamına gelir. Dikkate alınacak tek şey, girilen verilerin gerçek bir dize ya da int ya da herhangi bir şey olsun, dize olacağıdır.
İken input()
diğer taraftan denemeden kullanıcı tarafından girilen verileri anlamak için. Böylece girdi helloworld
bile hatayı ' helloworld is undefined
' olarak gösterecektir .
Sonuç olarak, python 2 için , bir dize girmek için de ' helloworld
' python'da dizeleri kullanmak için kullanılan ortak yapı olan ' ' gibi girmeniz gerekir .
Kodunuzun python2 ve python3 ile çalıştığından emin olmak istiyorsanız, komut dosyanızda function input () işlevini kullanın ve bunu komut dosyanızın başına eklemek için ekleyin:
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")