Append có chậm trong python không?
Khi Python ngày càng trở nên phổ biến, số lượng người dùng Python cũng tăng lên. Python thực sự tương đối dễ học. Nó cũng rất linh hoạt để có nhiều cách khả thi hơn để đạt được một chức năng Show
Tuy nhiên, bất cứ khi nào có nhiều cách để thực hiện một việc cụ thể, điều đó có nghĩa là mỗi phương pháp đều có ưu và nhược điểm. Trong bài viết này, tôi đã thu thập 6 cách viết mã Python điển hình có thể dẫn đến hiệu suất tương đối tệ 1. Không nhập mô-đun gốcHình ảnh được cung cấp bởi Andreas Riedelmeier từ PixabayKhi sử dụng Python, một điều chúng ta không thể tránh khỏi đó là nhập các mô-đun, mô-đun tích hợp sẵn hoặc bên thứ 3. Đôi khi, chúng ta có thể chỉ cần một hoặc một số chức năng hoặc đối tượng từ mô-đun đó. Trong trường hợp này, chúng ta nên cố gắng chỉ nhập các hàm hoặc đối tượng mà chúng ta cần, thay vì nhập mô-đun gốc Đây là một ví dụ đơn giản. Giả sử chúng ta cần tính căn bậc hai cho một số số trong chương trình của mình Ví dụ chậm hơnimport math Trong ví dụ xấu, chúng tôi đã nhập mô-đun from math import sqrt 2 và sử dụng from math import sqrt 3 để truy cập chức năng. Tất nhiên, nó hoạt động mà không gặp vấn đề gì, nhưng hiệu suất sẽ tốt hơn nếu chúng ta có thể nhập hàm from math import sqrt 4Ví dụ nhanh hơnfrom math import sqrt Tốc độ này nhanh hơn 25% so với bản gốc. Ngoài ra, nếu chúng ta cần sử dụng hàm căn bậc hai nhiều lần trong chương trình của mình, mã sẽ gọn gàng và sạch sẽ hơn 2. Tránh sử dụng Dot / Dot ChainingHình ảnh được cung cấp bởi ancapictures từ PixabayRất trực quan khi sử dụng dấu chấm from math import sqrt 5 trong Python để truy cập các thuộc tính hoặc hàm từ một đối tượng. Hầu hết thời gian, không có vấn đề gì. Tuy nhiên, nếu chúng ta có thể tránh sử dụng dấu chấm hoặc thậm chí là dấu chấm nối tiếp, thì hiệu suất thực sự sẽ tốt hơnVí dụ bên dưới hiển thị việc thêm một số vào danh sách rồi xóa số đó Ví dụ chậm hơnmy_list = [1, 2, 3]my_list.append(4) Ví dụ nhanh hơnmy_list = [1, 2, 3]append = my_list.append Nếu bạn không tin rằng điều đó thực sự làm điều tương tự, chúng tôi có thể xác minh điều đó Sự xem xétTôi có thể mong đợi rằng nhiều nhà phát triển Python sẽ nói rằng kỹ thuật trong ví dụ này hơi vô lý. Thực ra ngay cả bản thân mình cũng ít khi viết code như trên. Tuy nhiên, thật tốt khi biết rằng chúng ta có thể lập trình như vậy và thậm chí có thể làm cho nó nhanh hơn Nếu chúng tôi muốn nối thêm vào danh sách và xóa các mục khỏi danh sách đó hàng triệu lần, có lẽ chúng tôi nên cân nhắc sử dụng mẹo này. Đó là lý do tại sao chúng ta cần cân bằng giữa hiệu suất và khả năng đọc mã của mình 3. Không sử dụng + để nối các chuỗiHình ảnh được cung cấp bởi PIRO4D từ PixabayCác chuỗi là bất biến trong Python. Do đó, khi chúng ta sử dụng “+” để nối nhiều chuỗi lại với nhau thành một chuỗi dài, thì mỗi chuỗi con sẽ hoạt động riêng biệt Ví dụ chậm hơn________số 8Cụ thể, đối với mỗi chuỗi con, nó cần yêu cầu một địa chỉ bộ nhớ và sau đó nối nó với chuỗi gốc trong địa chỉ bộ nhớ đó. Điều này trở thành một loại chi phí Ví dụ nhanh hơndef join_strs_better(strs): Tuy nhiên, khi chúng ta đang sử dụng hàm from math import sqrt 6, hàm này biết trước tất cả các chuỗi con và địa chỉ bộ nhớ được cấp phát với độ dài phù hợp với chuỗi được nối cuối cùng. Do đó, không có chi phí cấp phát bộ nhớ cho mỗi chuỗi conSự xem xétRất khuyến khích sử dụng chức năng from math import sqrt 6 càng nhiều càng tốt. Tuy nhiên, đôi khi chúng ta có thể chỉ muốn nối hai chuỗi. Hoặc, chỉ vì mục đích thuận tiện mà chúng tôi muốn sử dụng “+”. Trong những trường hợp đó, sử dụng dấu “+” dẫn đến khả năng đọc tốt hơn và độ dài mã ít hơn4. Không sử dụng biến tạm thời để trao đổi giá trịHình ảnh được cung cấp bởi magee từ PixabayNhiều thuật toán yêu cầu trao đổi giá trị của hai biến. Trong hầu hết các ngôn ngữ lập trình khác, điều này thường được thực hiện bằng cách đưa vào một biến tạm thời như sau Ví dụ chậm hơnfrom math import sqrt 2Rất trực quan là chúng ta cần một biến tạm thời làm bộ đệm. Vì vậy, nó sẽ giúp giữ giá trị của biến from math import sqrt 8 trong khi giá trị của biến from math import sqrt 9 được truyền cho biến from math import sqrt 8. Sau đó, giá trị của from math import sqrt 8 trong bộ đệm có thể được gán cho biến from math import sqrt 9Ví dụ nhanh hơnTuy nhiên, trong Python, chúng ta không phải sử dụng biến tạm thời. Python có cú pháp tích hợp để đạt được giá trị trao đổi này như sau from math import sqrt 8Nó không chỉ nhanh hơn một chút mà còn làm cho mã của chúng ta gọn gàng và sạch sẽ hơn 5. Sử dụng ngắn mạch cho điều kiện nếuHình ảnh được cung cấp bởi Lấy từ PixabayĐánh giá “ngắn mạch” tồn tại trong nhiều ngôn ngữ lập trình, Python cũng vậy. Về cơ bản, nó đề cập đến hành vi mà một số toán tử boolean trong đó đối số thứ hai chỉ được thực thi hoặc đánh giá nếu đối số thứ nhất KHÔNG đủ để xác định giá trị của toàn bộ biểu thức Hãy chứng minh điều này trong một ví dụ. Giả sử chúng ta có một danh sách như sau from math import sqrt 9Công việc của chúng ta là lọc danh sách để tìm tất cả những người có tên bắt đầu bằng chữ “C”, và tuổi trên hoặc bằng 30 Ví dụ chậm hơnCó hai điều kiện mà cả hai cần phải được thỏa mãn
Vì vậy, chúng ta có thể viết mã như sau from math import sqrt 0Ví dụ nhanh hơnChà, không có gì sai với mã trong ví dụ trước. Tuy nhiên, trong ví dụ trang điểm cụ thể này, chỉ có “Chris” ở độ tuổi trên 30 Do đó nếu ta viết điều kiện kiểm tra tên trước thì có 3 tên thỏa mãn (Chris, Chelsea và Carol). Khi đó, điều kiện thứ 2 về tuổi sẽ được kiểm tra lại cho cả 3 người này Tuy nhiên, do đánh giá ngắn mạch, nếu chúng tôi viết điều kiện tuổi trước, chỉ có tuổi của Chris là trên 30 và sẽ được kiểm tra kỹ xem tên của anh ấy có bắt đầu bằng chữ “C” hay không Trong trường hợp này, nó nhanh hơn gần như 100% 6. Không sử dụng vòng lặp While nếu chúng ta có thể sử dụng vòng lặp ForHình ảnh được cung cấp bởi ancapictures từ PixabayPython sử dụng rất nhiều C để cải thiện hiệu suất, cụ thể là CPython. Về câu lệnh lặp, Vòng lặp For trong Python có số bước tương đối ít hơn trong đó nhiều bước chạy dưới dạng mã C hơn Vòng lặp While Do đó, khi chúng ta có thể sử dụng vòng lặp For-Loop trong Python thì không nên sử dụng vòng lặp while. Điều này không chỉ vì For-Loop thanh lịch hơn trong Python mà còn có hiệu suất tốt hơn Ví dụ chậm hơnfrom math import sqrt 0Ví dụ nhanh hơnfrom math import sqrt 1Tóm lượcHình ảnh được cung cấp bởi Hervé Lagrange từ PixabayTrong bài viết này, tôi đã liệt kê 6 mẹo giúp chương trình Python của bạn nhanh hơn. Tuy nhiên, cũng cần hết sức lưu ý, không nên lúc nào cũng đặt hiệu quả công việc lên hàng đầu. Đôi khi, tính dễ đọc và ngắn gọn cũng nên được tính đến Đó là tất cả về sự cân bằng. ) Đọc mọi câu chuyện của Christopher Tao (và hàng nghìn nhà văn khác trên Medium)Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…trung bình. com Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. (Nhấp vào liên kết ở trên) Tại sao Python chắp thêm chậm?append() có thể khiến python phân bổ thêm bộ nhớ , việc này sẽ mất thời gian.
Python nối thêm danh sách nhanh như thế nào?Điều này cho chúng tôi biết rằng, sẽ mất khoảng 0. 60 giây để thêm danh sách mới có 1 phần tử vào danh sách trước đó. Mặt khác, việc tạo một bộ có 1 phần tử mất khoảng 0. 17 giây.
Mở rộng hoặc nối thêm Python nhanh hơn?extend((i/j,j)) hiệu quả hơn cả hai vì nó không tạo danh sách trung gian. Tạo một tuple trung gian rẻ hơn
Cái nào nối thêm hoặc chèn nhanh hơn?Chèn chậm hơn khi so sánh với chắp thêm . |