2010-09-27 29 views
7

Trong hướng dẫn, tôi đọc rằng có sự khác biệt giữa inputraw_input. Tôi phát hiện ra rằng họ đã thay đổi hành vi của các hàm này trong Python 3.0. Hành vi mới là gì?Sự khác biệt giữa `đầu vào` và` raw_input`

Và tại sao trong python console thông dịch viên này

x = input() 

Gửi một lỗi nhưng nếu tôi đặt nó trong một file.py và chạy nó, nó không?

Trả lời

14

Trong python 2.x, raw_input() trả về một chuỗi và input() đánh giá đầu vào trong bối cảnh thực hiện, trong đó nó được gọi là

>>> x = input() 
"hello" 
>>> y = input() 
x + " world" 
>>> y 
'hello world' 

Trong python 3.x, input đã được loại bỏ và các chức năng trước đây được biết đến là raw_input hiện là input. Vì vậy, bạn phải tự gọi compile và hơn eval nếu bạn muốn có chức năng cũ.

python2.x     python3.x 

raw_input() --------------> input()    
input() -------------------> eval(input())  

Trong 3.x, phiên trên đi như thế này

>>> x = eval(input()) 
'hello' 
>>> y = eval(input()) 
x + ' world' 
>>> y 
'hello world' 
>>> 

Vì vậy, bạn đã có thể nhận được một lỗi tại người thông dịch bởi vì bạn đã không đặt dấu ngoặc kép quanh đầu vào của bạn. Điều này là cần thiết bởi vì nó được đánh giá. Bạn gặp lỗi tên ở đâu?

+0

Whats xảy ra ở đây tôi đã cố gắng của bạn dòng trên bàn điều khiển (3.x) và nó diễn giải x = đầu vào() "xin chào" <- i nhập bảng điều khiển này khi được hỏi) x + "thế giới" y 'x + "thế giới" Tại sao? x không được dịch sang một chuỗi –

+0

lỗi tôi đã nhận được >>> x = input() Traceback (cuộc gọi gần đây nhất cuối cùng): File "", dòng 1, trong EOFError: EOF khi đọc một dòng –

+0

@Guillermo, Phần thông dịch mà tôi đã trình bày là dành cho 2.x. Tôi rối tung lên trên 3.x (tôi đã không chơi với nó nhiều ở tất cả) vì vậy tôi đã xóa một phần của câu trả lời của tôi. – aaronasterling

3

đầu vào() vs raw_input()

raw_input thu thập các nhân vật sử dụng các loại và trình bày chúng như là một chuỗi. đầu vào() không chỉ đánh giá số mà còn xử lý bất kỳ đầu vào nào như mã Python và cố thực hiện nó. Người dùng có kiến ​​thức nhưng độc hại có thể gõ vào một lệnh Python thậm chí có thể xóa một tập tin. Nhập vào raw_input() và chuyển đổi chuỗi thành kiểu dữ liệu bạn cần sử dụng các hàm chuyển đổi dựng sẵn của Python.

Cũng nhập(), không an toàn do lỗi người dùng! Nó mong đợi một biểu thức Python hợp lệ làm đầu vào; nếu đầu vào không hợp lệ về cú pháp, thì cú pháp SyntaxError sẽ được nâng lên.

3

của nó đơn giản:

  1. raw_input() lợi nhuận chuỗi giá trị
  2. khi input() trở lại nguyên giá trị

Ví dụ:

1.

x = raw_input("Enter some value = ") 
print x 

Đầu ra:

Enter some value = 123 
'123' 

2.

y = input("Enter some value = ") 
print y 

Output:

Enter some value = 123 
123 

Do đó nếu chúng ta thực hiện x + x = Nó sẽ ra như 123123

trong khi nếu chúng ta thực hiện y + y = Nó sẽ ra như 246

+0

Có thể trên trăn 2.x, nhưng không phải trên trăn 3.x. input() trong python 3.x luôn trả về một chuỗi. Hơn nữa, raw_input() đã bị xóa khỏi python 3 –

Các vấn đề liên quan