Tổng hợp một số tips mình thấy khá hay để cải thiện performance của các chương trình thực thi bằng Python.
Tips cải thiện tốc độ thực thi của code Python
Tips cải thiện tốc độ thực thi của code Python
Chuyện là mình đang làm học Python và có một bài tập mà 1 số test case bị Time Limit Exceeded. Sau một hồi tìm hiểu thì mình nhận ra có một vài cách có thể cải thiện tốc độ code của mình. Những tips này khá hiệu quả khi xử lý input lớn hoặc cũng có thể khiến có code của bạn trở nên Pythonic hơn.

Dùng cấu trúc dữ liệu và thuật toán phù hợp

Python có nhiều cấu trúc dữ liệu được tích hợp sẵn như List, Tuple, Set và Dictionary (hay gọi tắt là Dict). Do ảnh hưởng của tư duy của C/C++ nên ban đầu mình thường lúc List.
Nhưng mà trong Python, Set và Dict có hiệu suất tìm kiếm là O(1) vì chúng dùng bảng băm. Do vậy mà trong một số trường hợp, dùng Set hoặc Dict sẽ nhanh hơn rất nhiều so với dùng List.

Dùng list comprehension thay vì vòng for

Đây là một cách khá hay để gán các phần tử trong List chỉ trong 1 dòng duy nhất. Thay vì dùng vòng lặp for như thế này:
L = []
for i in range (1, 1000):
if i%3 == 0:
L.append (i)
Hãy gán các phần tử như thế này:
L = [i for i in range (1, 1000) if i%3 == 0]

Gán kết hợp nhiều biến

Python cho phép bạn gán nhiều biến trên cùng một dòng, khiến code của bạn dễ nhìn và gọn gàng hơn.
a, b, c, d = 2, 3, 5, 7

Hạn chế dùng biến global

Python có từ khóa global để khai báo các biến toàn cục. Nhưng các biến global mất nhiều thời gian hơn trong quá trình hoạt động so với biến local. Vì vậy, bạn nên hạn chế sử dụng biến global nếu không cần thiết.

Nối chuỗi bằng join

Hàm join() nhanh hơn toán tử + vì toán tử + tạo ra một chuỗi mới rồi mới copy content của chuỗi gốc, việc này làm tốn kha khá thời gian. Nên, thay vì code như này:
concatenatedString = "Programming " + "is " + "fun."
Thì, hãy code như này:
concatenatedString = " ".join (["Programming", "is", "fun."])

Sử dụng import hợp lý

Bởi vì khi bạn sử dụng chức năng gọi . (dot), nó bắt đầu bằng cách gọi _getattribute() hoặc _getattribute() và sau đó sử dụng các thao tác từ điển gây tốn thời gian. Thay vì vậy, hãy thử sử dụng from module import function.
Thay vì dùng như này:
import math
val = math.sqrt(60)
Hãy dùng như này:
from math import sqrt
val = sqrt(60)

Dùng 1 thay cho infinity loop

Sử dụng while 1 thay vì while True sẽ giảm một số thời gian chạy.

Dùng các thư viện để xử lý dataset lớn

C/C++ nhanh hơn Python. Do đó, nhiều package và module được viết bằng C/C++ và có thể được sử dụng trong các chương trình Python. Numpy, ScipyPandas là ba trong số đó và rất phổ biến khi làm việc với các tập dữ liệu lớn.
Trên đây là một số tips mà mình đã tìm hiểu và sử dụng qua giúp cho code Python của mình chạy nhanh hơn. Mình vẫn đang trong quá trình học nên bài viết này sẽ còn được cập nhật thêm.