Apa perbedaan antara raw_input()
dan input()
dalam Python 3?
input
ke raw_input
dan mengabaikan kesalahan nama.
Apa perbedaan antara raw_input()
dan input()
dalam Python 3?
input
ke raw_input
dan mengabaikan kesalahan nama.
Jawaban:
Perbedaannya adalah bahwa raw_input()
tidak ada dalam Python 3.x, sementara input()
tidak. Sebenarnya, yang lama raw_input()
telah diubah namanya menjadi input()
, dan yang lama input()
hilang, tetapi dapat dengan mudah disimulasikan dengan menggunakan eval(input())
. (Ingat itu eval()
jahat. Coba gunakan cara yang lebih aman untuk menguraikan masukan Anda jika memungkinkan.)
raw_input
...?" - "Perbedaannya adalah tidak ada raw_input
." ... Perbedaan yang cukup drastis, kataku!
eval
(dan exec
) umumnya harus dihindari karena mereka dapat menjadi risiko keamanan. Untuk perincian, silakan lihat Eval benar-benar berbahaya oleh veteran SO Ned Batchelder. Dan tentu saja saran itu juga berlaku untuk Python 2 lama input
.
eval()
dan exec()
, tetapi Anda harus terlebih dahulu memahami mengapa Anda tidak harus menggunakan eval()
sebelum memutuskan untuk menggunakannya.
Dalam Python 2 , raw_input()
mengembalikan sebuah string, dan input()
mencoba menjalankan input sebagai ekspresi Python.
Karena mendapatkan string hampir selalu seperti yang Anda inginkan, Python 3 melakukannya dengan input()
. Seperti yang dikatakan Sven, jika Anda menginginkan perilaku lama, itu akan eval(input())
berhasil.
raw_input()
.
raw_input()
mengambil persis apa yang diketik pengguna dan meneruskannya kembali sebagai string.
input()
pertama mengambil raw_input()
dan kemudian melakukan eval()
di atasnya juga.
Perbedaan utama adalah bahwa input()
mengharapkan pernyataan python yang benar secara sintaksis di mana raw_input()
tidak.
raw_input()
diganti namanya input()
jadi sekarang input()
mengembalikan string yang tepat.input()
dihapus.Jika Anda ingin menggunakan yang lama input()
, artinya Anda perlu mengevaluasi input pengguna sebagai pernyataan python, Anda harus melakukannya secara manual dengan menggunakan eval(input())
.
Dalam Python 3, raw_input()
tidak ada yang sudah disebutkan oleh Sven.
Dalam Python 2, input()
fungsi mengevaluasi input Anda.
Contoh:
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
Pada contoh di atas, Python 2.x mencoba mengevaluasi harsha sebagai variabel daripada string. Untuk menghindari itu, kita dapat menggunakan tanda kutip ganda di sekitar input kita seperti "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input ()
Fungsi raw_input () `tidak mengevaluasi, itu hanya akan membaca apa pun yang Anda masukkan.
Contoh:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Contoh:
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
Dalam contoh di atas, saya hanya mencoba mengevaluasi input pengguna dengan eval
fungsi.
Saya ingin menambahkan sedikit lebih detail pada penjelasan yang diberikan oleh semua orang untuk pengguna python 2 . raw_input()
, yang, sekarang, Anda tahu yang mengevaluasi data apa pun yang dimasukkan pengguna sebagai string. Ini berarti bahwa python bahkan tidak mencoba untuk memahami data yang dimasukkan lagi. Yang akan dipertimbangkan adalah bahwa data yang dimasukkan akan berupa string, apakah itu string aktual atau int atau apa pun.
Sementara input()
di sisi lain mencoba memahami data yang dimasukkan oleh pengguna. Jadi input seperti helloworld
bahkan akan menunjukkan kesalahan sebagai ' helloworld is undefined
'.
Sebagai kesimpulan, untuk python 2 , untuk memasukkan string juga Anda harus memasukkannya seperti ' helloworld
' yang merupakan struktur umum yang digunakan dalam python untuk menggunakan string.
Jika Anda ingin memastikan, bahwa kode Anda berjalan dengan python2 dan python3, gunakan input fungsi () dalam skrip Anda dan tambahkan ini untuk memulai skrip Anda:
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")