Phương thức nhập liệu trong Python để nâng cao hiệu suất

487

Python là một ngôn ngữ thân thiện với người dùng một cách đáng kinh ngạc với điểm trừ duy nhất là chậm. So với C, C ++ và Java, nó khá chậm. Trên nền tảng lập trình trực tuyến, nếu C/C ++ giới hạn thời gian quy định là X, thì thông thường, trong Java, thời gian cần thiết là 2X và với Python, đó là 5X.

  Lấy nhiều dữ liệu đầu vào từ người dùng trong Python
  Lấy dữ liệu đầu vào từ chương trình console trong Python

Để cải thiện tốc độ thực thi mã cho các vấn đề chuyên sâu đầu vào/đầu ra, các ngôn ngữ có các quy trình đầu vào và đầu ra khác nhau.

Lấy một ví dụ:
Hãy xem xét một câu hỏi về việc tìm ra tổng số được nhập từ người dùng.
Nhập một số N .
Nhập N số cách nhau bởi một khoảng trắng trên một dòng.
Ví dụ:

Các giải pháp khác trong Python cho vấn đề trên:

Phương pháp thông thường trong Python: (Python 2.7)

1. raw_input () nhận một đối số tùy chọn. Nó cũng loại bỏ ký tự dòng mới từ giá trị string mà nó trả về.
2. print chỉ là một trình bao bọc mỏng định dạng các đầu vào (khoảng trắng giữa các đối số và newline ở cuối) và gọi hàm write của một đối tượng đã cho.

Phương pháp nhanh hơn một chút bằng cách sử dụng tích hợp stdin, stdout: (Python 2.7)

1. sys.stdin, mặt khác, là đối tượng tệp. Nó giống như việc người ta có thể tạo ra bất kỳ đối tượng tệp nào khác mà để đọc đầu vào từ tệp. Trong trường hợp này, tập tin sẽ là bộ đệm đầu vào tiêu chuẩn.
2. stdout.write(‘D\n’) nhanh hơn print’D’ .
3. Thậm chí nhanh hơn là viết tất cả một lần bằng stdout.write (“”.join(list-comprehension)) nhưng điều này làm cho việc sử dụng bộ nhớ phụ thuộc vào độ lớn của dữ liệu đầu vào.

Sự khác biệt về thời gian:

Thêm buffered pipe io: (Python 2.7)

1. Hiểu đơn giản, việc thêm code buffered IO trước submission code làm cho đầu ra nhanh hơn.
2. Lợi ích của các đối tượng io.BytesIO là chúng thực hiện giao diện common-ish (thường được gọi là đối tượng ‘giống tệp’). Các đối tượng BytesIO có một con trỏ bên trong và cứ mỗi lệnh gọi để đọc (n) thì con trỏ hiện lên.
3. Mô-đun atexit cung cấp một giao diện đơn giản để đăng ký các hàm được gọi khi chương trình đóng lại bình thường. Các mô-đun sys cũng cung cấp một cái móc, là sys.exitfunc, nhưng chỉ đăng ký một hàm ở đó. Việc đăng ký atexit có thể được sử dụng bởi nhiều mô-đun và thư viện cùng một lúc.

Thường xử lý một lượng lớn dữ liệu, phương thức bình thường không thực thi trong khoảng thời gian giới hạn. Phương thức 2 giúp duy trì một lượng lớn dữ liệu I/O. Phương thức 3 là nhanh nhất. Thông thường, phương thức 2 và 3 hỗ trợ việc xử lý các tệp dữ liệu đầu vào lớn hơn 2 hoặc 3 MB.

Lưu ý: các code đề cập ở trên được sử dụng trong Python 2.7. Để sử dụng trong các phiên bản Python 3.X, chỉ cần thay thế raw_input() bằng cú pháp input() của Python 3.X. Phần còn lại vẫn hoạt động bình thường.

TechTalk via Cafedev