อะไรคือความแตกต่างระหว่าง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")