อะไรคือความแตกต่างระหว่าง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
) โดยทั่วไปควรหลีกเลี่ยงเพราะอาจมีความเสี่ยงด้านความปลอดภัย สำหรับรายละเอียดโปรดดูEval มันอันตรายจริงๆโดยทหารผ่านศึก Ned Batchelder และแน่นอนว่าคำแนะนำนั้นใช้ได้กับ Python 2 รุ่นเก่าinput
ด้วย
eval()
และexec()
แต่คุณต้องเข้าใจก่อนว่าทำไมคุณไม่ควรใช้eval()
ก่อนตัดสินใจใช้งาน
ในหลาม2 , raw_input()
ส่งกลับสตริงและinput()
พยายามที่จะเรียกการป้อนข้อมูลที่เป็นนิพจน์หลาม
นับตั้งแต่ได้รับสตริงก็เกือบจะเสมอสิ่งที่คุณต้องการ, Python 3 input()
ไม่ว่าด้วย ดังที่สเวนบอกว่าหากคุณต้องการพฤติกรรมเก่าeval(input())
ๆ
raw_input()
ไม่ได้
raw_input()
ใช้สิ่งที่ผู้ใช้พิมพ์และส่งกลับเป็นสตริง
input()
ใช้ครั้งแรกraw_input()
แล้วดำเนินการeval()
กับมันเช่นกัน
ความแตกต่างที่สำคัญคือinput()
คาดว่าคำสั่งหลามที่ถูกต้องทางไวยากรณ์ที่raw_input()
ไม่
raw_input()
ถูกเปลี่ยนชื่อเป็นinput()
ดังนั้นตอนนี้input()
ส่งคืนสตริงที่แน่นอนinput()
ถูกลบหากคุณต้องการที่จะใช้เก่าซึ่งหมายความว่าคุณต้องประเมินการป้อนข้อมูลของผู้ใช้เป็นคำสั่งหลามคุณต้องทำมันด้วยตนเองโดยใช้input()
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
ฟังก์ชัน
ฉันต้องการที่จะเพิ่มรายละเอียดเล็ก ๆ น้อย ๆ ที่จะอธิบายให้โดยทุกคนสำหรับหลามผู้ใช้ 2 คน raw_input()
ซึ่งตอนนี้คุณรู้ว่าจะประเมินว่าข้อมูลใดที่ผู้ใช้ป้อนเป็นสตริง ซึ่งหมายความว่าหลามไม่พยายามแม้แต่จะเข้าใจข้อมูลที่ป้อนอีกครั้ง ทั้งหมดที่จะพิจารณาคือข้อมูลที่ป้อนจะเป็นสตริงไม่ว่าจะเป็นสตริงจริงหรือ int หรืออะไรก็ตาม
ในขณะที่input()
ในอีกทางหนึ่งพยายามที่จะเข้าใจข้อมูลที่ป้อนโดยผู้ใช้ ดังนั้นอินพุตhelloworld
จะแสดงข้อผิดพลาดเป็น ' helloworld is undefined
'
โดยสรุปสำหรับpython 2เพื่อป้อนสตริงด้วยคุณต้องป้อนเหมือน ' helloworld
' ซึ่งเป็นโครงสร้างทั่วไปที่ใช้ในหลามเพื่อใช้สตริง
หากคุณต้องการให้แน่ใจว่ารหัสของคุณกำลังทำงานกับ 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")