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.

Để 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ố N đượ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ụ:

Input : 
5
1 2 3 4 5
Output :
15

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

1.1 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.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# basic method of input output 
# input N 
n = int(raw_input()) 
  
# input the array 
arr = [int(x) for x in raw_input().split()] 
  
# initialize variable 
summation = 0
  
# calculate sum 
for x in arr: 
    summation += x 
      
# print answer 
print(summation) 

2. 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.

# import inbuilt standard input output  
from sys import stdin, stdout  
  
# suppose a function called main() and 
# all the operations are performed 
def main(): 
  
    # input via readline method 
    n = stdin.readline() 
  
    # array input similar method 
    arr = [int(x) for x in stdin.readline().split()] 
  
    #initialize variable 
    summation = 0
      
    # calculate sum 
    for x in arr: 
        summation += x 
  
    # could use inbuilt summation = sum(arr) 
  
    # print answer via write 
    # write method writes only 
    # string operations 
    # so we need to convert any 
    # data into string for input 
    stdout.write(str(summation)) 
  
# call the main method 
if __name__ == "__main__": 
    main()

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

Timing summary (100k lines each)
——————————–
Print : 6.040 s
Write to file : 0.122 s
Print with Stdout : 0.121 s

2.1 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.


# template begins 
##################################### 
  
# import libraries for input/ output handling 
# on generic level 
import atexit, io, sys 
  
# A stream implementation using an in-memory bytes  
# buffer. It inherits BufferedIOBase. 
buffer = io.BytesIO() 
sys.stdout = buffer
  
# print via here 
@atexit.register 
def write(): 
    sys.__stdout__.write(buffer.getvalue()) 
  
##################################### 
# template ends 
  
# normal method followed 
# input N 
n = int(raw_input()) 
  
# input the array 
arr = [int(x) for x in raw_input().split()] 
  
# initialize variable 
summation = 0
  
# calculate sum 
for x in arr: 
    summation += x 
  
# print answer 
print(summation) 

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.

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!