TL; DR
input
ฟังก์ชั่นใน Python 2.7 ประเมินสิ่งที่คุณป้อนเป็นนิพจน์ Python หากคุณต้องการอ่านสตริงให้ใช้raw_input
ฟังก์ชันใน Python 2.7 ซึ่งจะไม่ประเมินค่าสตริงการอ่าน
หากคุณกำลังใช้งูหลาม 3.x, ได้รับการเปลี่ยนชื่อเป็นraw_input
input
อ้างบันทึกประจำรุ่น Python 3.0 ,
raw_input()
input()
เปลี่ยนชื่อเป็น นั่นคือinput()
ฟังก์ชั่นใหม่จะอ่านบรรทัดจากsys.stdin
และส่งคืนโดยการขึ้นบรรทัดใหม่ที่ต่อท้าย มันจะเพิ่มEOFError
ถ้าอินพุตถูกยกเลิกก่อนกำหนด เพื่อรับพฤติกรรมเก่าของinput()
ใช้eval(input())
ใน Python 2.7มีสองฟังก์ชันที่สามารถใช้เพื่อรับอินพุตของผู้ใช้ได้ หนึ่งคือและอีกคนหนึ่งคือinput
raw_input
คุณสามารถคิดถึงความสัมพันธ์ระหว่างพวกเขาได้ดังนี้
input = eval(raw_input)
พิจารณาโค้ดต่อไปนี้เพื่อทำความเข้าใจกับสิ่งที่ดีกว่านี้
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
ยอมรับสตริงจากผู้ใช้และประเมินสตริงในบริบท Python ปัจจุบัน เมื่อฉันพิมพ์dude
เป็น input ก็พบว่าdude
ถูกผูกไว้กับค่าthefourtheye
และเพื่อให้ผลการประเมินจะกลายเป็นและที่ได้รับมอบหมายให้thefourtheye
input_variable
NameError
ถ้าผมใส่อย่างอื่นซึ่งไม่ได้มีในบริบทหลามปัจจุบันก็จะล้มเหลวจะเป็น
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
ข้อควรพิจารณาด้านความปลอดภัยด้วย Python 2.7's input
:
เนื่องจากผู้ใช้ประเภทใดก็ตามที่ได้รับการประเมินจึงมีปัญหาด้านความปลอดภัยเช่นกัน ตัวอย่างเช่นถ้าคุณโหลดos
โมดูลในโปรแกรมของคุณimport os
แล้วจากนั้นผู้ใช้พิมพ์
os.remove("/etc/hosts")
สิ่งนี้จะถูกประเมินเป็นการแสดงออกของการเรียกใช้ฟังก์ชันโดย python และจะถูกดำเนินการ หากคุณกำลังดำเนินการ Python ด้วยสิทธิ์ระดับสูง/etc/hosts
ไฟล์จะถูกลบ ดูสิว่ามันอันตรายขนาดไหน?
เพื่อแสดงสิ่งนี้ให้ลองใช้input
ฟังก์ชั่นอีกครั้ง
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
ตอนนี้เมื่อinput("Enter your name: ")
ถูกดำเนินการมันจะรออินพุตของผู้ใช้และอินพุตของผู้ใช้คือการเรียกใช้ฟังก์ชั่น Python ที่ถูกต้องและเพื่อให้มีการเรียกใช้ นั่นคือเหตุผลที่เราเห็นEnter your name again:
พรอมต์อีกครั้ง
ดังนั้นคุณจะดีกว่าด้วยraw_input
ฟังก์ชั่นเช่นนี้
input_variable = raw_input("Enter your name: ")
หากคุณจำเป็นต้องแปลงผลประเภทอื่น ๆ raw_input
บางแล้วคุณสามารถใช้ฟังก์ชั่นที่เหมาะสมในการแปลงสตริงกลับโดย ตัวอย่างเช่นหากต้องการอ่านอินพุตเป็นจำนวนเต็มให้ใช้int
ฟังก์ชันดังที่แสดงในคำตอบนี้
ในหลาม 3.xมีเพียงหนึ่งฟังก์ชั่นที่จะได้รับปัจจัยการผลิตของผู้ใช้และที่เรียกว่าinput
ซึ่งเทียบเท่ากับงูหลาม raw_input
2.7
input
จะทำตัวแบบนี้ แต่เฉพาะใน 2.7 มันพูดอะไรเมื่อคุณเรียกใช้python --version
จากพรอมต์คำสั่ง? อีกวิธีหนึ่งถ้าคุณเขียนimport sys; print(sys.version)
ที่จุดเริ่มต้นของสคริปต์ของคุณ?