2011-02-06 29 views
274

Sự khác biệt giữa raw_input()input() trong python3.x là gì?Sự khác nhau giữa raw_input() và input() trong python3.x là gì?

+1

Làm cách nào để bạn tạo một chương trình nhập dữ liệu vào cả Python 2 và Python 3 tương thích? –

+1

Để thực hiện điều đó, bạn thử đặt 'input' thành' raw_input' và bỏ qua các lỗi tên. –

+1

Tra cứu thư viện 'sáu' để tương thích với python 2 và 3. –

Trả lời

325

Sự khác biệt là raw_input() không tồn tại trong Python 3.x, trong khi input() thì có. Trên thực tế, cũ raw_input() đã được đổi tên thành input() và cũ input() đã biến mất, nhưng có thể dễ dàng được mô phỏng bằng cách sử dụng eval(input()). (Hãy nhớ rằng eval() là ác, vì vậy nếu cố gắng sử dụng những cách an toàn hơn của phân tích đầu vào của bạn nếu có thể.)

+55

"Sự khác nhau giữa' raw_input' ...? " - "Sự khác biệt là không có' raw_input'. " ... Đúng là một sự khác biệt quyết liệt, tôi muốn nói! –

+8

Trong Python 2 tôi đoán họ giả định các lập trình viên muốn thực sự "thực hiện" như một lệnh người dùng nhập vào, vì ban đầu (tôi đoán) yêu cầu đầu vào từ người dùng có thể chỉ cho điều đó. Nhưng khi họ nhận ra các lập trình viên cũng có thể muốn lấy đầu vào "thô", họ đã thiết kế một hàm khác gọi là "raw_input". Trong Python 3 họ nhận thấy điều ngu xuẩn là gì và chỉ đơn giản là xóa thực thi mặc định của đầu vào ban đầu, chỉ cho một hàm đơn giản. –

+1

Repl.it, chạy Py3.5.1 có raw_input() làm từ khóa. – OldBunny2800

170

Trong Python , raw_input() trả về một chuỗi, và input() cố gắng để chạy các đầu vào như một biểu Python.

Vì việc nhận chuỗi gần như luôn là thứ bạn muốn, Python 3 thực hiện điều đó với input(). Như Sven nói, nếu bạn muốn hành vi cũ, eval(input()) sẽ hoạt động.

+5

Bạn nên thêm rằng Python 3 không có 'raw_input()'. –

+0

việc sử dụng đầu vào đang chạy như là biểu thức python là gì? –

+1

@AkshayVijayJain, có thể nó được thiết kế để nhập số. Nhưng nó hoàn toàn không an toàn. – MarSoft

94

Python 2:

  • raw_input() mất chính xác những gì người dùng gõ và chuyển nó trở lại như là một chuỗi.

  • input() trước tiên mất raw_input() và sau đó thực hiện eval() trên đó.

Sự khác biệt chính là input() hy vọng một tuyên bố python đúng cú pháp nơi raw_input() không.

Python 3:

  • raw_input() được đổi tên thành input() vì vậy bây giờ input() trả về chuỗi chính xác.
  • input() đã bị xóa.

Nếu bạn muốn sử dụng số input() cũ, có nghĩa là bạn cần đánh giá đầu vào của người dùng làm câu lệnh python, bạn phải thực hiện thủ công bằng cách sử dụng eval(input()).

+11

... trong python 2. – askewchan

+1

không áp dụng cho python 3 –

4

Tôi muốn thêm chi tiết hơn một chút vào lời giải thích do mọi người cung cấp cho người dùng python 2. raw_input(), mà bây giờ, bạn biết rằng đánh giá dữ liệu nào người dùng nhập vào dưới dạng chuỗi. Điều này có nghĩa là python không cố gắng hiểu dữ liệu đã nhập nữa. Tất cả những gì nó sẽ xem xét là dữ liệu đã nhập sẽ là chuỗi, cho dù đó có phải là chuỗi thực hay int hay bất kỳ thứ gì. Mặt khác, trong khi input() cố gắng hiểu dữ liệu do người dùng nhập. Vì vậy, đầu vào như helloworld thậm chí sẽ hiển thị lỗi là 'helloworld is undefined'.

Kết luận, đối với python 2, để nhập chuỗi, bạn cần phải nhập nó như 'helloworld' là cấu trúc chung được sử dụng trong python để sử dụng chuỗi.

20

Trong Python 3, raw_input() không tồn tại mà đã được đề cập bởi Sven.

Trong Python 2, hàm input() đánh giá đầu vào của bạn.

Ví dụ:

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 

Trong ví dụ trên, Python 2.x đang cố gắng để đánh giá Harsha như là một biến chứ không phải là một chuỗi. Để tránh điều đó, chúng ta có thể sử dụng dấu ngoặc kép quanh đầu vào của chúng tôi như "Harsha":

>>> name = input("what is your name?") 
what is your name?"harsha" 
>>> print(name) 
harsha 

raw_input()

Các raw_input() `chức năng không đánh giá, nó sẽ chỉ đọc những gì bạn đi vào.

Ví dụ:

name = raw_input("what is your name ?") 
what is your name ?harsha 
>>> name 
'harsha' 

Ví dụ:

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 

Trong ví dụ trên, tôi chỉ cố gắng để đánh giá đầu vào người dùng với eval chức năng.

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